Loop를 이용한 Depth From Focus

간략한 설명

파일: \examples\Processing\Loop\DepthFromFocus\DepthFromFocus.vad
\examples\Processing\Loop\DepthFromFocus\DepthFromFocus_NoiseReduction.vad

기본 플랫폼: imaFlex CXP-12 Quad

간단한 설명

루프를 사용하여 이미지 시퀀스로부터 초점이 맞은 이미지, 색인 깊이 맵 및 이미지 대비를 계산하는 방법.

VisualApplets 의 “DepthFromFocus.vad” 설계는 부분적으로 초점이 맞지 않은 일련의 이미지를 바탕으로 완전히 초점이 맞은 이미지를 계산합니다. 또한 “DepthFromFocus_NoiseReduction.vad” 설계는 초점이 맞은 이미지의 노이즈를 줄일 수 있는 기능을 추가로 제공합니다. 시퀀스의 각 이미지에 대해 카메라의 초점 설정, 이미지 평면 위치 또는 피사체 위치(축 방향)가 변경됩니다. 이때, 관측된 피사체의 일부는 항상 초점이 맞춰져 있어야 하며, 이미지의 다른 모든 부분은 초점이 흐려져야 합니다. 또한 이 설계에서는 해당 이미지 인덱스 맵을 사용하여 이미지 시퀀스의 가장 높은 국소 대비를 계산합니다. 이 맵은 초점이 맞춰진 출력 이미지의 현재 픽셀이 어느 이미지에서 추출되었는지에 대한 정보를 제공합니다. 이를 통해 관측된 피사체의 형상을 계산할 수 있습니다. 초점이 맞춰진 이미지, 이미지 인덱스 맵 및 명암비는 빨강, 녹색, 파랑 색상 값으로 PC로 전송됩니다. 이 설계는 marathonVCL 보드용 CameraLink Base 구성의 그레이스케일 카메라에 구현되었습니다.

이론적 배경

부분적으로 초점이 맞지 않은 일련의 이미지들로부터 완전히 초점이 맞은 이미지를 계산하기 위해, 각 이미지의 국소 대비를 계산합니다. 이 대비는 고역통과 필터를 사용하여 결정됩니다:

식 46.


현재 이미지의 해당 위치에서 국소 콘트라스트가 이전 이미지의 국소 콘트라스트보다 높다면, 현재 이미지의 픽셀 값이 사용됩니다. 그렇지 않은 경우 이전 이미지의 픽셀 값이 사용됩니다. 이 절차는 전체 이미지 시퀀스에 대해 반복됩니다. 완전히 초점이 맞춰진 이미지의 모든 픽셀에 대해, 국소 대비가 가장 높은 해당 이미지의 인덱스가 저장됩니다. 이 정보를 통해 사용자는 (예를 들어, 얇은 렌즈의 경우 초점 거리 와 상 거리가 알려진 경우) 관측된 물체의 모양을 복원할 수 있습니다.

VisualApplets에서의 구현

그림 366에는 기본 설계 구조가 나와 있다. 그레이스케일 카메라에서 촬영된 부분적으로 초점이 흐린 일련의 이미지의 경우, 완전히 초점이 맞은 이미지, 국소 대비 및 국소 대비가 가장 높은 이미지의 지수 맵이 RGB 색상 구성 요소로 DmaToPC 를 통해 PC로 전송됩니다. 계산은 HierarchicalBox DepthFromFocus에서 수행됩니다.

기본 디자인 구조

그림 366. 기본 설계 구조


그림 367에서는 HierarchicalBox의 내용을 확인할 수 있습니다. DepthfromFocus의 내용을 확인할 수 있습니다. 전송 매개변수 IntParamTranslator_TranslateSequenceLength, IntParamReference_ReferenceImageWidth 및 IntParamReference_ReferenceImageHeight 를 통해, 상자 내의 모든 연산자에 필요한 이미지 시퀀스 길이, 이미지 너비 및 높이를 설정할 수 있습니다 DepthFromFocus상자에서 필요한 모든 연산자에 대해 이미지 시퀀스 길이, 이미지 너비 및 높이를 설정할 수 있습니다. 이를 위해 상자에서 마우스상자 내의 모든 연산자에 대해 이미지 시퀀스 길이, 이미지 너비 및 높이를 설정할 수 있습니다. 이를 위해 상자 DepthFromFocus상자를 마우스 오른쪽 버튼으로 클릭하고 "속성"을 선택한 다음 해당 매개변수를 설정하면 됩니다.

HierarchicalBox에서 고역통과 필터 국부 대비는 필터를 적용하여 다음에 따른 커널 식 (46). 이 박스의 상단 출력 링크는 현재 픽셀 값입니다. 이 박스의 하단 출력 링크는 현재 국소 명암비입니다. 연산자들 RxImageLink_Rx2_LoopContrast/TxImageLink_Tx2_LoopContrast 루프의 시작과 끝을 나타내며, 일련의 이미지에서 가장 높은 국소 대비를 계산합니다. 이미지 시퀀스에 대한 계산을 시작할 때 루프의 초기 조건으로, 동기화 및 계산상의 이유로 HierarchicalBox 내에 빈 이미지가 삽입됩니다. InitAndResetContrast.

HierarchicalBox의 DepthFromFocus 속성 내용

그림 367. HierarchicalBox의 DepthFromFocus 속성


HierarchicalBox 내에서 CompareContrast 현재의 국소 콘트라스트는 시퀀스의 이전 이미지에서 이 위치의 국소 콘트라스트와 비교됩니다. 그림 368은 이 박스의 내용을 보여줍니다. 현재 국소 대비가 이전 이미지의 국소 대비보다 높으면, 현재 국소 대비가 이 HierarchicalBox의 하단 출력 링크로 전달됩니다. 반대의 경우, 이전 국소 대비의 값이 전달됩니다. 박스의 상단 출력 링크 CompareContrast 는 인덱스 0(현재 대비가 더 강함) 또는 1(이전 대비가 더 강함)입니다.

HierarchicalBox의 ‘비교 및 대조’ 내용

그림 368. HierarchicalBox CompareContrast의 내용


루프 RxImageLink_Rx1_LoopIndexOfBest/TxImageLink_Tx1_LoopDepthIndex 내의 HierarchicalBox SelectDepthIndex(콘텐츠는 그림 369 참조)에서는 현재 이미지의 로컬 대비가 가장 높은 경우 현재 이미지 인덱스(연산자 ModuloCount_SequenceIndexCount)가 선택됩니다. 그렇지 않은 경우 이전 이미지의 이미지 인덱스가 이 박스의 출력 링크로 전달됩니다. 이 절차는 전체 이미지 시퀀스에 대해 반복됩니다. 결과적으로 시퀀스에서 로컬 대비가 가장 높은 이미지 인덱스가 계산됩니다. 빈 이미지를 삽입하는 초기 조건은 박스 InitAndResetDepth에서 수행됩니다.

HierarchicalBox SelectDepthIndex의 콘텐츠

그림 369. HierarchicalBox SelectDepthIndex의 콘텐츠


이미지 시퀀스에서 완전히 초점이 맞춰진 이미지는 박스 SelectPixelValue에서 수행되는 계산과 함께 루프 RxImageLink_Rx0_LoopPixelValue/ TxImageLink_Tx0_LoopPixelValue에서 계산됩니다. 그림 370에 그 콘텐츠가 나와 있습니다. 현재 로컬 대비가 이전 이미지의 로컬 대비보다 높으면 현재 픽셀 값이 IF 연산자의 출력으로 전달됩니다. 이 절차는 전체 이미지 시퀀스에 대해 반복됩니다. 시퀀스가 끝나면 완전히 초점이 맞춰진 이미지가 LastImageOfSequenceOnly 박스의 입력으로 전달됩니다.

HierarchicalBox SelectPixelValue의 콘텐츠

그림 370. HierarchicalBox SelectPixelValue의 콘텐츠


그림 371에 이 박스의 콘텐츠가 나와 있습니다. 현재 로컬 대비가 가장 높은 픽셀 값, 해당 이미지 깊이 인덱스, 그리고 현재 로컬 대비가 가장 높은 값이 RGB 색상 구성 요소로 결합됩니다. 완전히 초점이 맞춰진 이미지, 가장 높은 로컬 대비, 그리고 해당 이미지 깊이 인덱스를 가진 마지막 RGB 이미지만 박스의 출력 및 DMA 전송을 통해 PC로 전달됩니다.

HierarchicalBox LastImageOfSequenceOnly의 콘텐츠

그림 371. HierarchicalBox LastImageOfSequenceOnly의 콘텐츠


VA 디자인 "DepthFromFocus_NoiseReduction"에서는 적응형 Median Filter를 사용하여 결과 포커스 이미지의 로컬 노이즈를 줄일 수 있는 기능이 있습니다. 이 필터는 HierarchicalBox AdaptiveMedian에서 찾을 수 있습니다. 현재 픽셀에 로컬 노이즈가 있는 경우 로컬 Median이 선택됩니다. 현재 위치에 로컬 노이즈가 없는 경우 현재 픽셀 값이 선택됩니다. 로컬 노이즈는 로우패스 필터와 적응형 임계값 IS_GreaterThan_Threshold을 통해 판별됩니다. 이 방법을 사용하면 로컬 구조의 대비는 손실되지 않으면서 노이즈를 줄일 수 있습니다.