콘텐츠로 건너뛰기
STAGING SERVER
DEVELOPMENT SERVER

Flat-Field Correction (CXP Interface Cards)#

Flat-Field Correction 기능은 센서 픽셀의 광 감도 차이 또는 균일하지 않은 조명으로 인해 이미지에 발생하는 불균일성을 블록 기반 Flat-Field Correction 방식으로 제거할 수 있도록 지원합니다.

불균일한 조명이나 렌즈로 인해 이미지에 발생하는 불균일성을 교정하는 "Shading Correction" 또는 "Vignetting Correction" 같은 보정 방법은 Flat-Field Correction을 통해 보상할 수 있습니다.

센서 픽셀의 광 감도 차이로 인해 이미지에 발생하는 불균일성은 센서의 증폭기 및 ADC의 차이로 인해 발생합니다. 구형 CMOS 센서의 경우, 이는 강한 열 잡음으로 나타날 수 있습니다.

Flat-Field Correction은 센서 이미지의 세 가지 주요 불균일성을 해결합니다.

  1. DSNU(Dark Signal Non-Uniformity)는 각 개별 픽셀이 고유한 오프셋을 가질 수 있기 때문에 발생합니다. 이 현상은 조명과 무관하며 센서 온도에 따라 달라지고 노출 시간이 길어질수록 더욱 두드러집니다.
  2. PRNU(Photo Response Non-Uniformity)는 개별 픽셀의 게인 변화로 인해 발생하며, 빛에 반응하는 방식의 차이를 초래합니다.
  3. 센서의 특정 영역이 다른 영역과 다르게 반응할 때 센서 영역별 상이한 응답이 발생할 수 있습니다. 이러한 변화는 일반적으로 센서 설계나 특정 영역의 온도 차이로 인해 발생합니다. 컬러 카메라의 경우, 이는 이미지의 특정 부분에서 눈에 띄는 색상 차이를 유발할 수 있습니다.

모든 현상은 Flat-Field Correction을 통해 교정할 수 있습니다. Enhanced Applets은 블록 기반 Flat-Field Correction을 계산합니다. Enhanced Applets에서는 픽셀 단위 또는 열 단위의 Flat-Field Correction을 수행할 수 없습니다.

정보

Flat-Field Correction은 일부 Basler 카메라에서 카메라 기능으로도 제공됩니다. 사용 중인 Basler 카메라가 Flat-Field Correction을 지원하는 경우, 카메라 기능을 사용하는 것이 좋습니다. 자세한 내용은 Flat-Field Correction 카메라 기능 문서를 참조하세요.

보정 자체는 이러한 불균일성을 보상합니다. 이는 오프셋 값을 뺀 후 게인을 적용하여 조명 응답을 보정하는 방식으로 이루어집니다.

Flat-Field Correction 개략도

Enhanced Applets의 블록 기반 Flat-Field Correction은 다음 프로세스를 사용합니다.

Flat-Field Correction 프로세스

Basler는 값을 수동으로 계산하여 applet에 입력하지 않는 것을 권장합니다. 대신 다음 세 가지 옵션 중 하나를 선택하십시오.

pylon Viewer에서 프레임 그래버용 Flat-Field Correction 플러그인 사용#

Basler는 획득 결과에 Flat-Field Correction(FFC)을 적용할 수 있는 pylon Viewer 플러그인을 제공합니다.

Basler 웹사이트에서 Flat-Field Correction 플러그인을 ZIP 파일로 다운로드할 수 있습니다.

시스템 요구 사항#

Flat-Field Correction 플러그인을 사용하려면 다음 설정을 확인하십시오.

  • Basler 카메라가 설치되어 있습니다.
  • 컴퓨터에 pylon 25.10이 설치되어 있습니다.

    정보

    • Flat-Field Correction 플러그인은 pylon 25.10에서만 작동합니다.
    • pylon 8에서 25.10으로 업그레이드하는 경우:
      • 이전 버전을 제거하십시오.
      • 새 버전(pylon 25.10)만 설치하십시오.
  • 프레임 그래버 또는 인터페이스 카드가 컴퓨터에 연결되어 있습니다.

  • 향상된 applet이 프레임 그래버 또는 인터페이스 카드에 로드되어 있습니다.

FFC 플러그인 설치#

  1. 다운로드한 ZIP 파일의 압축을 풉니다.
  2. EnhAppletFFC.dll 파일을 찾습니다. 이는 FFC 플러그인입니다.
  3. 다음을 복사하십시오. EnhAppletFFC.dll 파일을 pylon 설치 폴더의 다음 위치에 넣습니다. Applications\x64\lib\pylonviewer\plugins.

    pylon용 FFC 플러그인 설치

플러그인 사용 전 준비 사항#

FFC 플러그인을 사용하기 전에 다음 사항을 검토해야 합니다.

보정 값을 계산하기 전에 다음 사항을 확인하십시오.

  • 조명이 최대한 균일해야 합니다.
  • 렌즈 조리개와 초점이 올바르게 설정되어 있습니다.
  • Exposure Time이 구성되어 있습니다.
  • 아날로그 게인과 같은 모든 카메라 전처리 기능이 구성되어 있습니다.
  • 올바른 Enhanced Applet이 로드되어 있습니다.
  • 카메라와 애플릿 모두에 올바른 Pixel Format이 설정되어 있습니다.
  • 카메라가 정상 작동 온도에 도달했습니다.
  • 애플릿에 전처리가 설정되어 있지 않습니다. 이미지가 전체 ROI를 사용합니다.

    pylon Viewer: 이미지 취득

스크린샷은 pylon Viewer에서의 이미지 취득을 보여줍니다. Line Profile에서 볼 수 있듯이, 이미지 모서리 쪽으로 강한 음영이 있습니다. 또한 일부 픽셀은 포화 상태입니다. 물체의 어두운 부분이 관심 대상이기 때문에 이는 의도된 것입니다. 이는 머신 비전 애플리케이션을 위한 현실적인 예이기도 합니다.

이미지에 Flat-Field Correction 값 계산 및 적용#

  1. Flat-Field Correction 플러그인을 시작합니다.

    1. pylon Viewer에서 카메라를 선택합니다.
    2. 선택한 카메라의 이미지 취득을 중지합니다.
    3. pylon Viewer에서 Tools > Flat-Field Correction (Frame Grabber)를 선택합니다.

    pylon Viewer: Flat-Field Correction 플러그인 시작

  2. Flat-Field Correction 플러그인이 열립니다.

    pylon Viewer: FFC 설정

  3. 3. Configure the camera. 단계에서:

    1. Flat-Field Correction을 적용할 ROI를 구성합니다. 기본값을 유지하면 전체 이미지가 다시 계산됩니다.
  4. 클릭 다음.
    이 Calculate Pixel Offset (DSNU) 페이지가 열립니다.

    pylon Viewer: 오프셋 계산

  5. 어두운 이미지 시퀀스를 취득하여 오프셋 보정 값을 계산합니다. 어두운 이미지를 취득하려면 다음을 수행하십시오.

    1. 렌즈를 덮고 이미지를 취득합니다.
    2. Calculate pixel offset을 선택합니다.
    3. Calculate Pixel Offset 버튼을 클릭합니다.
      플러그인에 스케일된 이미지와 pixel offset 값이 표시됩니다.
  6. 클릭 다음.
    이 Calculate Gain (PRNU) 페이지가 열립니다.

    pylon Viewer: Gain

  7. gain 값을 계산합니다:

    1. gain correction 값을 얻기 위해 밝은 기준 이미지 시퀀스를 취득합니다: 균일하게 밝은 물체(예: 흰색 종이)를 렌즈 아래에 놓고 이미지를 취득합니다.
    2. 선택적으로 기준 pixel 값과 Exposure Time을 설정할 수 있습니다.

      정보

      컬러 이미지의 색상 왜곡을 줄이려면 평균 gain 값을 기준 pixel 값으로 사용하십시오.

    3. Calculate Gain Correction 버튼을 클릭합니다.
      결과로 gain correction 값이 표시되며, View Options 드롭다운 리스트 박스에서 Live - Gain Corrected를 선택하면 gain이 보정된 이미지를 확인할 수 있습니다.

    4. 클릭 다음.
      이 Calculate Block-Based FFC Values 페이지가 열립니다.

      pylon Viewer: Calculating the Block Size

  8. Flat-Field Correction 값을 계산하여 이미지에 적용합니다.

  9. 선택적으로 블록 크기를 설정하거나 자동 계산을 수행할 수 있습니다. 이 예제의 경우 5120 x 5120 픽셀의 이미지 크기가 사용되므로, 예를 들어 48 x 34 픽셀의 블록 크기를 지정하면 총 16,157개의 블록이 생성되며, 이는 사용 가능한 총 16,384개 블록보다 적습니다.
  10. 선택적으로 Linear extension을 지정하고 Edge handling을 Pixel, Half Block 또는 Block으로 설정할 수 있습니다.
  11. Calculate Correction Data - Store And Apply 버튼을 활성화하려면 계산 값의 저장 위치를 지정하십시오.
  12. Calculate Correction Data - Store And Apply 버튼을 클릭합니다.
  13. 계산이 처리되고 지정된 폴더에 파일이 생성되며 계산된 gain 및 offset 값이 이미지에 적용됩니다.
  14. 이미지 위의 View Options 드롭다운 리스트 박스에서 미리보기 이미지에 적용할 FFC 값(gain 값, offset 값, 둘 다 또는 없음)을 선택합니다.
  15. Finish를 클릭하여 FFC 플러그인을 종료합니다.
  16. 이 Line Profile 이제 균일한 이미지가 표시되며 고품질 이미지를 취득할 수 있습니다. 다음을 사용하십시오. FFC mode parameter FFC를 켜거나 끕니다.

    pylon Viewer: Result of FFC

Framegrabber SDK에서 Flat-Field Correction 계산#

Basler는 Framegrabber SDK에서 Flat-Field Correction 값을 계산하고 적용하는 데 도움이 되는 Python 스크립트를 제공합니다.

이 스크립트는 Basler Website에서 ZIP 파일로 다운로드할 수 있습니다. 패키지 포함 내용:

  • 흑백 이미지용 스크립트 1개
  • 컬러(Bayer) 이미지용 스크립트 1개

정보

컴퓨터를 다시 시작하거나 프레임 그라버 응용 프로그램을 열 때마다 FFC 설정을 프레임 그라버에 다시 로드해야 합니다. 프레임 그라버에는 휘발성 memory가 있으므로, 카메라의 User Sets에 저장되는 방식과 달리 데이터를 저장할 수 없습니다.

Flat-Field Correction 값을 계산하려면 이미지 경로와 파라미터에 맞게 Python 스크립트를 조정하십시오.

  1. 다크 이미지 획득:
    1. 렌즈를 가리고 다크 이미지를 캡처합니다.
    2. 컴퓨터에 이미지를 저장합니다.
  2. 밝은 기준 이미지 획득(게인 보정용):
    1. 균일하게 밝은 물체(예: 흰색 종이)를 렌즈 아래에 놓고 이미지를 캡처합니다.
    2. 컴퓨터에 이미지를 저장합니다.
  3. Python 스크립트 편집:

    1. 텍스트 편집기에서 스크립트를 엽니다.
    2. 지정된 섹션에서 다크 및 브라이트 이미지의 경로를 업데이트합니다.

      ################# Calculation of pixelwise FFC coefficients for offset and gain##########################
      
      # Read dark image
                             # Set the image path
      darkImage = cv2.imread("C:/.../examples/Processing/Shading/Shading2D/ImagesBlockFFC/darkImage_5120x5120_bayerBG8.bmp",-1)
      
      # Read bright image
                            # Set the image path
      brightImage = cv2.imread("C:/.../examples/Processing/Shading/Shading2D/ImagesBlockFFC/brightImage_5120x5120_bayerBG8.bmp",-1)
      
    3. 컬러 이미지의 경우 이미지 경로 바로 아래에 있는 Bayer 패턴도 조정하십시오.

      # Set bayerpattern
      
      bayerpattern = 'BayerBG8'
      
    4. 다음 파라미터를 다음에서 조정하십시오. # set parameters: 섹션:

      # set parameters:
      
      MaxNumberOfBlocksInY = 16384
      MaxNumberOfBlocksInX = 3072
      blocksize_x = 64
      blocksize_y = 64
      offsetBits = 8 # "Offset Bits must be more than the fractional bits in it!"
      offsetFractionalBits = 2
      gainBits = 12 #"Gain Bits must be more than the fractional bits in it!"
      gainFractionalBits = 10
      parallelism=16
      w = 5120
      
      이러한 파라미터 값은 향상된 앱릿 또는 VisualApplets 디자인에서 얻을 수 있습니다. 앱릿에 액세스하려면 다음 도구 중 하나에서 엽니다.

      • microDisplay X
      • pylon Viewer
      • VisualApplets
  4. 변경 사항을 저장하고 Python 스크립트를 실행합니다.

  5. 스크립트는 Flat-Field Correction에 필요한 게인 및 오프셋 값이 포함된 *.txt 파일을 생성합니다. 이 파일들은 Python 스크립트와 동일한 디렉토리에 저장됩니다.

게인 및 오프셋 값을 적용하려면:

  1. microDisplay X를 열고 Enhanced Applet을 로드합니다.
  2. 다음에서 FFC 파라미터 블록에서 생성한 파일의 오프셋 및 게인 값을 로드합니다.

    microDisplay X에서 Flat-Field Correction을 위한 Offset 및 Gain 값 로드

  3. 게인 및 오프셋 파일이 저장된 디렉토리로 이동하여 적절한 파일을 선택합니다.

  4. 게인 및 오프셋 파일 모두와 이미지의 각 컬러 채널에 대해 이 단계를 반복합니다.
  5. 이미지 취득을 시작합니다.
  6. 다음에서 FFC Mode 파라미터를 선택하고 Offset and Gain 값들을 적용합니다:

    microDisplay X에서 Flat-Field Correction을 위한 Offset 및 Gain 값 적용

    이제 취득한 이미지에 Flat-Field Correction이 적용됩니다.

VisualApplets을 사용한 Flat-Field Correction 기능 사용자 지정#

VisualApplets에는 블록 기반 Flat-Field Correction 계산을 위한 디자인 예제가 포함되어 있습니다. Enhanced Applets의 표준 구현 대신 애플리케이션에 맞게 기능을 조정해야 하는 경우 이 예제를 사용하십시오. 자세한 내용과 저장 위치는 VisualApplets Tutorial을 참조하십시오.

VisualApplets에서 예제를 사용하는 것은 Enhanced Applets를 사용하는 것과 유사합니다. 다음 단계를 따르십시오:

  1. Calculating Flat-Field Correction in the Framegrabber SDK에 설명된 대로 Enhanced Applets와 제공된 Python 스크립트를 사용하여 계수를 계산합니다.
  2. VisualApplets에서 Flat-Field Correction 예제 디자인을 엽니다.
  3. VisualApplets에서 FFC 계층형 박스의 정적 파라미터를 구성합니다.

    계층형 박스는 픽셀 Bit Width, Parallelism 및 이미지 형식에 자동으로 적응합니다. 먼저 입력 링크를 파라미터화해야 합니다. 정적 파라미터를 설정하기 전에 이 작업을 수행하는 것이 중요합니다.

    허용되는 형식은 다음과 같습니다:

    • Bit width: 8~16
    • Artithmetic: 부호 없음
    • Parallelism: 1~64
    • Kernel Columns, Kernel Rows: 1
    • Color Format: VAF_GRAY
    • Color Flavor: FL_NONE
    • Max. Image Width: 임의
    • Max. Image Height: 임의

    정적 파라미터는 블록 기반 FFC의 정밀도 및 FPGA 리소스 사용량을 정의합니다:

    • OffsetBits: 오프셋 보정에 사용되는 비트 수를 정의합니다. 이는 정수 비트와 소수 비트의 합입니다.
    • OffsetFractionalBits: 소수 비트 수를 정의합니다. 고정 소수점 Arithmetic 설명은 다음 섹션을 참조하십시오. 보정 계수 Offset 및 Gain 로딩.
    • GainBits: 게인 보정에 사용되는 비트 수를 정의합니다. 이는 정수 비트와 소수 비트의 합입니다.
    • GainFractionalBits: 소수 비트 수를 정의합니다. 고정 소수점 Arithmetic 설명은 다음 섹션을 참조하십시오. 보정 계수 Offset 및 Gain 로딩.
    • MemoryType: UltraRAM, Block RAM 또는 LUT RAM 중 하나를 선택합니다. UltraRAM이 권장됩니다.
    • MaxNumbrOfBlocks: 블록 기반 FFC에 사용되는 최대 블록 수를 선택합니다. URAM을 선택한 경우 MemoryType, 16384개의 블록만 사용할 수 있습니다.
    • MaxNumberOfBlocksInX: X 방향의 최대 블록 수를 정의합니다. 일반적으로 이는 Max. Image Width / Parallelism.
    • MaxNumberOfBlocksInY: Y 방향의 최대 블록 수를 정의합니다.
    • MaxBlockSizeInX: X 방향의 최대 블록 크기를 정의합니다. 애플리케이션에 적합한 값을 선택하십시오. 일반적인 용도로는 전체 이미지 너비를 설정할 수 있습니다.
    • MaxBlockSizeInY: Y 방향의 최대 블록 크기를 정의합니다. 애플리케이션에 적합한 값을 선택하십시오. 일반적인 용도로는 전체 이미지 높이를 설정할 수 있습니다.

    동적 파라미터는 애플리케이션 요구 사항에 따라 런타임에 변경할 수 있습니다.

    • CoefficientsXLength: 이 값은 pylon Viewer와 FFC 플러그인에서 사용한 Enhanced Applet의 ROI 크기와 같이, 계산되어 업로드된 계수 파일과 일치해야 합니다.
    • CoefficientsYLength: 이 값은 pylon Viewer와 FFC 플러그인에서 사용한 Enhanced Applet의 ROI 크기와 같이, 계산되어 업로드된 계수 파일과 일치해야 합니다.
    • BlockSizeMode: 선택합니다. Manual 또는 Auto. 자동 모드에서는 사용 가능한 블록이 이미지 전체에 분산됩니다. 수동 모드의 경우 다음 파라미터를 사용하여 블록 크기를 설정할 수 있습니다. pylon Viewer에서 FFC 플러그인을 사용한 경우 해당 값을 복사하십시오.
      • BlockSizeInX: 다음의 경우 블록 크기를 정의합니다. BlockSizeMode 로 설정된 경우, Manual. pylon Viewer에서 FFC 플러그인을 사용한 경우, 해당 값을 이 파라미터에 복사하십시오.
      • BlockSizeInY: 다음의 경우 블록 크기를 정의합니다. BlockSizeMode 로 설정된 경우, Manual. pylon Viewer에서 FFC 플러그인을 사용한 경우, 해당 값을 이 파라미터에 복사하십시오.
      • EnoughBlocksForImageSize: 이 읽기 전용 파라미터는 정의된 최대 블록 수가 주어진 블록 크기 및 ROI 설정에 충분한지 여부를 나타냅니다.
      • OffsetCoefficients: 오프셋 계수를 위한 필드 파라미터입니다. FFC pylon 플러그인에서 텍스트 파일을 업로드하십시오. 형식에 대한 설명은 다음 섹션에서 확인할 수 있습니다. 보정 계수 Offset 및 Gain 로딩.
      • GainCoefficients: 오프셋 계수를 위한 필드 파라미터입니다. FFC pylon 플러그인에서 텍스트 파일을 업로드하십시오. 형식에 대한 설명은 다음 섹션에서 확인할 수 있습니다. 보정 계수 Offset 및 Gain 로딩.
      • FlatFieldCorrectionMode: FFC Offset과 Gain을 켤지 끌지 선택합니다. 이는 이미지 취득 중에 수행할 수 있습니다.
  4. VisualApplets의 디자인 타임 또는 SDK 애플리케이션(pylon API, GenApi, GenTL consumer 또는 Framegrabber SDK)의 런타임에 FFC 계층형 상자의 동적 파라미터를 구성합니다.

다음 스크린샷은 VisualApplets에서 FFC 계층형 상자를 파라미터와 함께 사용하는 것을 보여줍니다.

VisualApplets: 계층형 상자로서의 FFC

배경 정보: 계산 공식#

다음 섹션에서는 FFC 값을 계산하는 데 사용되는 공식을 설명합니다. 이 정보는 참고용으로만 제공됩니다.

정보

Basler는 오류를 유발할 수 있으므로 이러한 값을 수동으로 계산하거나 pylon 또는 microDisplay X에 수동으로 입력하지 않을 것을 강력히 권장합니다. 대신 제공된 스크립트와 플러그인을 사용하십시오.

오프셋 및 게인 계수 결정#

보정 값 계산 전에 몇 가지 준비 작업이 필요합니다.

  • 조명은 가능한 한 균일해야 합니다.
  • 렌즈 조리개와 초점이 올바르게 설정되어야 합니다.
  • Exposure Time 역시 구성되어야 합니다.
  • 아날로그 게인 등 카메라의 모든 전처리기능을 설정해야 합니다.
  • 카메라는 정상 작동 온도에서 실행되어야 합니다.

오프셋#

보정을 위한 오프셋 계수 계산은 일부 개별 편차를 제외하고는 이 섹션에서 설명하는 표준 방식을 따릅니다.

DSNU 또는 센서 관련 오프셋을 보정할 오프셋 계수를 결정하려면 렌즈 캡을 닫는 등의 방법으로 센서에 빛이 들어오지 않는 카메라 이미지를 획득해야 합니다. 이론상 센서는 모두 0 값을 출력해야 하지만, DSNU로 인해 픽셀 값에 개별 오프셋이 발생할 수 있습니다. 따라서 획득한 암전(dark) 이미지는 오프셋 필드, 즉 오프셋 계수를 나타냅니다.

DSNU는 카메라 설정과 온도에 따라 달라지므로, 특히 노출 및 아날로그 게인 설정과 관련하여 실제 조건에서 이미지를 획득해야 합니다. 또한 노이즈를 제거하기 위해 여러 이미지의 평균값에서 오프셋 값을 도출해야 합니다.

  • D(x, y): 위치 x,y에서 여러 이미지에 걸친 평균 암전 픽셀 값
  • Offset(x, y) = D(x, y)

Gain#

애플리케이션에서 획득한 객체들은 서로 다른 밝기 값을 가집니다. 이미지에서 흰색이나 반사 부위 등 가장 밝은 부분을 식별해야 합니다. 이러한 부위가 포화 상태(saturation)에 도달하지 않으면서 그에 가깝도록 노출, 조리개, 조명을 설정해야 합니다(어두운 부분에만 관심이 있어서 의도적으로 포화 상태로 만들려는 경우가 아니라면 말입니다).

예를 들어, 어두운 배경 위의 밝은 객체를 조사하려고 합니다. 이 경우 실제 전시 조건에서 렌즈 앞에 객체를 놓습니다. 조사한 객체의 가장 밝은 지점은 포화 상태가 아니면서 그에 가까워야 합니다. 예를 들어 8비트 이미지의 경우 약 240의 픽셀 값을 목표로 합니다. 다음으로, 동일한 밝기 값에 가까운 객체로 센서를 균일하게 조명해야 합니다. 예를 들어 이는 구조가 없는 흰색 종이가 될 수 있습니다. 역시 어떤 픽셀도 포화 상태여서는 안 됩니다. 이러한 기준 이미지들을 몇 개 기록하고 평균 이미지를 계산합니다. P(x,y).

다음으로 게인 보정을 위한 기준 픽셀 값을 도출하는 여러 가지 방법이 존재합니다.

  1. 기준 이미지의 평균값: 다음의 가장 밝은 부분이 P(x,y) 획득한 객체의 가장 밝은 부분과 동일한 경우입니다. 따라서 다음의 평균 픽셀 값을 P(x,y) 기준으로 사용할 수 있습니다. PMean = Mean(P(x,y)).

    그러면 게인 계수는 다음과 같습니다.

    $$ Gain(x,y) = \frac{PMean}{(P(x,y)-Offset(x,y))} $$

  2. 사용자 정의 기준값 또는 가장 밝은 지점: 기준 이미지의 평균 밝기가 원하는 최대 픽셀 값과 같지 않은 경우, 직접 기준값을 정의할 수 있습니다. 이는 이미지에서 가장 밝은 지점의 값 또는 기준 객체와 기준 밝은 이미지 사이의 차이가 될 수 있습니다. 그런 다음 균일한 이미지의 픽셀이 이 기준값으로 보정되도록 게인 값이 계산됩니다. PRef.

    $$ Gain(x,y) = \frac{PRef}{(P(x,y)-Offset(x,y))} $$

두 공식 모두 나눗셈을 수행하기 전에 이전에 결정된 오프셋을 뺍니다. 단, 다음의 경우 P(x,y) 이미 2단계 절차에서 오프셋으로 보정된 경우에는 이 작업을 수행해서는 안 됩니다.

Bayer Pixel Format용 FFC#

Bayer Pixel Format의 경우, RGB 또는 기타 색상 공간으로 변환하기 전에 RAW Bayer 이미지에서 Flat-Field Correction이 처리됩니다. 이를 통해 최대 정밀도를 얻을 수 있습니다. 보정 계수 계산은 각 색상 성분별로 개별적으로 수행됩니다. 부수적인 효과로, 기준 이미지가 완벽한 흰색 이미지로 보정되므로 Flat-Field Correction을 통해 색상 보정도 수행됩니다.

블록 기반 Flat-Field Correction 정의#

블록 기반 Flat-Field Correction은 각 개별 픽셀의 보정값을 저장할 충분한 Memory가 없을 때 사용됩니다. 이 경우 이미지는 사용자가 정의할 수 있는 크기의 블록으로 분할됩니다. 각 블록은 모서리에 자체 시작 오프셋과 게인 계수를 가집니다.

Block Flat-Field Correction

사이에 있는 모든 픽셀의 경우, 프레임 그래버 내부의 선형 보간법을 사용하여 계수가 결정됩니다.

Linear Interpolation

이는 매우 정밀한 보정 결과를 가져오지만, 특히 개별 픽셀 변화로 인해 발생하는 DSNU 및 PRNU에 대해서는 개별 픽셀을 보정할 수 없습니다.

Interpolation Profile

블록 크기 및 Applet Parameter 값 수동 계산#

applet에서 블록 기반 FFC를 사용하려면, 보정 값이 계산된 후 다음 두 단계를 수행해야 합니다.

  1. 블록 크기를 구성합니다.
  2. 보정 계수를 frame grabber에 로드합니다.

블록 크기 구성#

해상도가 다른 모든 카메라를 frame grabber에 연결할 수 있으므로, applet 구현은 다양한 해상도에 적응하도록 만들어졌습니다.

모든 블록의 크기는 동일하지만 정사각형일 필요는 없습니다. 즉, 높이와 너비가 다를 수 있습니다. frame grabber는 Offset 및 Gain 보정 값을 위해 총 16384개의 블록을 제공합니다. 따라서 이미지 크기에 맞게 블록이 분배되도록 블록을 조정해야 합니다.

예: boost V boA5120-230cm은 5120 x 4096 픽셀의 해상도를 가집니다. 전체 해상도를 사용하려면 사용 가능한 16384개 블록을 이 모든 블록에 분배해야 합니다.

블록이 반드시 정사각형 모양일 필요는 없습니다. 예를 들어 Y 방향보다 X 방향에서 음영(shading)이 더 강한 경우, X 방향의 블록 크기는 더 작게, Y 방향의 블록 크기는 더 크게 설정해야 할 수 있습니다.

다음 이미지는 X 방향의 해상도가 Y 방향보다 높은 비정사각형 블록을 보여줍니다.

Block Flat-Field Correction

16384개의 블록을 전체 이미지에 정사각형 블록으로 균등하게 분배하려면 다음 공식을 사용합니다.

  • 이미지 너비: W
  • 이미지 높이: H
  • 총 블록 수: N

이미지의 총 면적은 다음과 같습니다: Image Area = W x H

각 블록은 한 변의 길이가 s인 정사각형입니다. 한 블록의 면적은 다음과 같습니다: Block Area = s2

블록 수는 다음과 같습니다:

$$ N = \frac{Image\space Area}{Block\space Area} = \frac{W\times H}{s^2} $$

다음 값을 구하려면 s:

$$ s = \sqrt{\frac{W\times H}{N}} $$

위의 예시의 경우: W = 5120, H = 4096, N = 16384:

$$ s = \sqrt{\frac{5120\times 4096}{16384}} = \sqrt{1280} = 35.78\space pixels $$

모든 블록 변의 길이를 applet에서 구성할 수 있는 것은 아닙니다. 예를 들어 X 방향의 블록 크기는 16의 배수여야 합니다.

주어진 예시의 경우, 블록 크기는 Bx= 32로 내림(round down)됩니다.

블록 높이를 계산하려면 사용 가능한 블록을 온전히 활용하기 위해 비정사각형 블록을 고려해야 합니다:

s2 = X 방향 블록 크기 x Y 방향 블록 크기 = Bx x By

그런 다음 블록 높이는 다음과 같이 결정할 수 있습니다.

$$ B_y=\left \lceil\frac{W\times H}{N\times B_x}\right \rceil $$

위의 예시에서는 다음과 같습니다.

$$ B_y=\left \lceil\frac{5120 \times 4096}{16384 \times 32}\right \rceil = 40 \space pixels $$

실제로 사용되는 블록 수는 다음과 같습니다.

$$ N_{actual}= \left \lceil\frac{W}{B_x}\right \rceil \times \left \lceil\frac{H}{B_y}\right \rceil = 16384\space blocks $$

이제 앱릿 파라미터를 설정할 수 있습니다.

  • FlatFieldCorrectionBlockWidth = 32
  • FlatFieldCorrectionBlockHeight = 40

    pylon Viewer: FFC Block Width 설정

보정 계수 오프셋 및 게인 로드#

각 블록에는 네 가지 오프셋 및 이득 계수 값 세트인 Q11,Q12,Q21,Q22가 필요합니다. 이 값들은 블록 가장자리의 서포트 포지션입니다.

Linear Interpolation

블록의 끝 위치는 다음 블록의 시작 위치입니다. 따라서 현재 블록의 Q11,Q12는 다음 수평 블록의 Q21,Q22와 같습니다.

다음 예시는 8x6 크기의 이미지에서 4x3 블록 크기를 보여줍니다. 끝 위치가 다음 블록의 시작 위치와 겹치는 것을 명확하게 확인할 수 있습니다. 게다가 이미지 가장자리의 블록 끝 서포트 포지션은 이미지 경계 외부에 있습니다. 블록 크기가 이미지 크기의 정수 나누어떨어지는 수가 아니면 이미지 가장자리의 블록은 이미지 외부로 더욱 벗어나게 됩니다.

겹치는 블록

  • 블록 0
    • x = 0, y = 0에서의 Q11
    • x = 4, y = 0에서의 Q12
    • x = 0, y = 3에서의 Q21
    • x = 4, y = 3에서의 Q22
  • 블록 1
    • x = 4, y = 0에서의 Q11
    • x = 8, y = 0에서의 Q12
    • x = 4, y = 3에서의 Q21
    • x = 6, y = 3에서의 Q22
  • 블록 2
    • x = 0, y = 3에서의 Q11
    • x = 4, y = 3에서의 Q12
    • x = 0, y = 6에서의 Q21
    • x = 4, y = 6에서의 Q22
  • 블록 1
    • x = 4, y = 3에서의 Q11
    • x = 8, y = 3에서의 Q12
    • x = 4, y = 6에서의 Q21
    • x = 6, y = 6에서의 Q22

Offset 및 Gain 값은 특정 범위와 해상도를 가진 고정 소수점 값으로 표현됩니다. 이 applet은 범위를 확인할 수 있는 몇 가지 정보 파라미터를 제공합니다.

pylon Viewer: FFC Gain 및 Offset 범위 설정

주어진 예시에서 Gain 값은 다음과 같은 범위를 가집니다:

$$ \left [0,2^{GainInteger} - \frac{1}{2^{GainFractional}}\right ] = \left [0,2^{2} - \frac{1}{2^{10}} \right ] = \left [0, \space 3.999\right ] $$

다시 말해, 이 applet은 최대 3.999까지의 이득 보정을 허용합니다. 예를 들어, 50의 픽셀 값은 최대 50 x 3.999 = 199까지 보정될 수 있습니다.

부동 소수점 값을 고정 소수점 값으로 변환하려면 소수부 비트를 곱하고 GainBits = GainInteger + GainFractional인 [0,2GainBits - 1] 범위로 제한합니다.

$$ Gain_{FixedPoint} = Gain_{Float} \times 2^{GainFractional} $$

고정 소수점 값 Q11, Q12, Q21, Q22는 각 블록의 큰 정수 값에 추가됩니다.

$$ Block(i) = Qfix_{11}\times 2^0 + Qfix_{12} \times 2^{GainBits} + Qfix_{21} \times 2^{2\times GainBits} + Qfix_{22} \times 2^{3\times GainBits} $$

또는 비트 시프트 연산으로 표현하면 다음과 같습니다:

$$ Block(i) = Qfix_{11} + Qfix_{12} \ll GainBits + Qfix_{21} \ll 2\times GainBits + Qfix_{22} \ll 3\times GainBits $$

예를 들어, 부동 소수점 값이 다음과 같을 때:

$$ Q_{11} = 1.1, Q_{12} = 1.3, Q_{21} = 0.9, Q_{22} = 1.4 $$

위의 해상도를 사용하여 고정 소수점으로 변환됩니다.

$$ Q_{11} = 1126, Q_{12} = 1331, Q_{21} = 922, Q_{22} = 1433 $$

applet 값은 다음과 같이 됩니다.

$$ Q_{11} = 1126, Q_{12} = 1331, Q_{21} = 922, Q_{22} = 1433 $$

따라서 applet 파라미터 값은 다음과 같습니다.

$$ Block(i) = 1126 + 1331 \ll 12 + 922 \ll 2\times 12 + 1433 \ll 3\times 12 = 98490484208742 $$

16진수 표현:

$$ Block(i) = 0\times 466 + 0\times 533 \ll 12 +0\times 39A \ll 2\times 12 + 0\times 599 \ll 3\times 12 = 0\times 599\space 39A\space 533\space 466 $$