Flat-Field Correction (imaWorx CXP-12 Quad)#
"Shading Correction" 또는 "Vignetting Correction"과 같이 불균일한 조명이나 렌즈로 인해 이미지에 발생하는 불균일성의 보정 방법은 Flat-Field Correction을 통해 보상할 수 있습니다.
센서 픽셀의 광 민감도 차이로 인해 이미지에 발생하는 불균일성은 센서의 증폭기와 ADC의 차이로 인해 발생합니다. 구형 CMOS 센서의 경우, 이는 강한 열 노이즈(column noise)로 나타날 수 있습니다.
Flat-Field Correction은 센서 이미지의 세 가지 주요 불균일성을 해결합니다.
- Dark Signal Non-Uniformity (DSNU)는 각 픽셀마다 고유한 오프셋이 존재하기 때문에 발생합니다. 이 현상은 조명과 무관하며 센서 온도에 따라 달라지고, Exposure Time이 길어질수록 더욱 두드러집니다.
- Photo Response Non-Uniformity (PRNU)는 개별 픽셀의 게인 편차로 인해 발생하며, 빛에 대한 반응 차이를 야기합니다.
- 센서 영역별 상이한 응답 특성은 센서의 특정 영역이 다른 영역과 다르게 반응할 때 발생할 수 있습니다. 이러한 편차는 주로 센서 설계 또는 특정 영역 간의 온도 차이로 인해 발생합니다. 컬러 카메라의 경우, 이는 이미지의 특정 부분에서 눈에 띄는 색상 차이를 유발할 수 있습니다.
모든 현상은 Flat-Field Correction으로 보정할 수 있습니다. Enhanced Applets는 블록 기반 Flat-Field Correction을 계산합니다. Enhanced Applets로는 픽셀 단위 또는 열 단위 Flat-Field Correction을 수행할 수 없습니다.
정보
Flat-Field Correction은 일부 Basler 카메라에서 카메라 기능으로도 제공됩니다. 사용 중인 Basler 카메라가 Flat-Field Correction을 지원하는 경우, 카메라 기능을 사용할 것을 권장합니다. 자세한 내용은 Flat-Field Correction 카메라 기능 문서를 참조하십시오.
보정 자체는 이러한 불균일성을 보상합니다. 이는 오프셋 값을 뺀 후 조명 응답을 보정하기 위한 게인을 적용하는 방식으로 수행됩니다.
Enhanced Applets의 블록 기반 Flat-Field Correction은 다음 프로세스를 사용합니다.
값을 직접 계산하여 앱릿에 수동으로 입력하지 않는 것이 좋습니다. 대신 다음 세 가지 옵션 중 하나를 선택하십시오.
- pylon Viewer에서 Frame Grabber용 Flat-Field Correction 플러그인 사용하기
- Framegrabber SDK에서 Flat-Field Correction 계산하기
- VisualApplets을 사용하여 Flat-Field Correction 기능 사용자 지정하기
pylon Viewer에서 Frame Grabber용 Flat-Field Correction 플러그인 사용하기#
Basler는 획득 결과에 Flat-Field Correction(FFC)을 적용할 수 있는 플러그인을 pylon Viewer에서 제공합니다.
Basler 웹사이트에서 ZIP 파일 형식으로 Flat-Field Correction 플러그인을 다운로드할 수 있습니다.
시스템 요구 사항#
Flat-Field Correction 플러그인을 사용하려면 다음 설정을 확인하십시오.
- Basler 카메라가 설치되어 있습니다.
-
컴퓨터에 pylon 25.10이 설치되어 있습니다.
정보
- Flat-Field Correction 플러그인은 pylon 25.10에서만 작동합니다.
- pylon 8에서 25.10으로 업그레이드하는 경우:
- 이전 버전을 제거합니다.
- 새 버전(pylon 25.10)만 설치합니다.
-
컴퓨터에 frame grabber 또는 interface card가 연결되어 있습니다.
- frame grabber 또는 interface card에 향상된 applet이 로드되어 있습니다.
FFC Plugin 설치#
- 다운로드한 ZIP 파일의 압축을 풉니다.
- EnhAppletFFC.dll 파일을 찾습니다. 이는 FFC 플러그인입니다.
- Copy the EnhAppletFFC.dll 파일을 pylon 설치 폴더에 Applications\x64\lib\pylonviewer\plugins.

플러그인 사용 전 준비 사항#
FFC 플러그인을 사용하기 전에 다음 사항을 검토해야 합니다.
- 기본 이론을 이해하려면 Background Information: Calculation Formulas 섹션을 참조하십시오.
보정 값을 계산하기 전에 다음 사항을 확인하십시오.
- 조명이 가능한 한 균일합니다.
- 렌즈 조리개와 초점이 올바르게 설정되어 있습니다.
- Exposure Time이 구성되어 있습니다.
- 아날로그 게인과 같은 모든 카메라 전처리 기능이 구성되어 있습니다.
- 올바른 향상된 Applet이 로드되었습니다.
- 올바른 camera Pixel Format이 카메라와 앱릿 모두에 설정되어 있습니다.
- 카메라가 정상 작동 온도에 도달했습니다.
- 앱릿에 사전 처리가 설정되어 있지 않습니다. 이미지가 전체 ROI를 사용합니다.

스크린샷은 pylon Viewer에서의 이미지 획득을 보여줍니다. Line Profile에서 볼 수 있듯이, 이미지 모서리 쪽으로 강한 음영이 있습니다. 또한 일부 픽셀이 포화 상태에 있습니다. 이는 객체의 어두운 부분이 관심 대상이기 때문에 의도된 것입니다. 이는 또한 머신 비전 애플리케이션을 위한 현실적인 예시입니다.
Flat-Field Correction 값 계산 및 이미지 적용#
-
Flat-Field Correction 플러그인을 시작합니다:
- pylon Viewer에서 카메라를 선택합니다.
- 선택한 카메라의 이미지 획득을 중지합니다.
- pylon Viewer에서 Tools > Flat-Field Correction (Frame Grabber)를 선택합니다.

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

-
3. Configure the camera. 단계에서:
- flat-field correction을 적용할 ROI를 설정합니다. 기본값을 유지하면 전체 이미지가 다시 계산됩니다.
-
클릭 다음.
The Calculate Pixel Offset (DSNU) 페이지가 열립니다:

-
다크 이미지 시퀀스를 획득하여 오프셋 보정 값을 계산합니다. 다크 이미지를 획득하려면:
- 렌즈를 가리고 이미지를 획득합니다.
- Calculate pixel offset을 선택합니다.
- Calculate Pixel Offset 버튼을 클릭합니다.
플러그인에 크기가 조정된 이미지와 픽셀 오프셋 값이 표시됩니다.
-
클릭 다음.
The Calculate Gain (PRNU) 페이지가 열립니다:

-
이득(gain) 값을 계산합니다:
- 이득 보정 값을 얻기 위해 밝은 기준 이미지 시퀀스를 획득합니다: 흰 종이와 같은 균일하고 밝은 물체를 렌즈 아래에 놓고 이미지를 획득합니다.
-
선택 사항으로, 기준 픽셀 값과 Exposure Time을 설정할 수 있습니다.
정보
컬러 이미지의 색상 왜곡을 줄이려면 평균 이득 값을 기준 픽셀 값으로 사용하십시오.
-
Calculate Gain Correction 버튼을 클릭합니다.
결과로 게인 보정 값이 표시되며, View Options 드롭다운 목록 상자에서 Live - Gain Corrected를 선택하여 게인 보정된 이미지를 확인할 수 있습니다. - 클릭 다음.
The Calculate Block-Based FFC Values 페이지가 열립니다:

-
flat-field correction 값을 계산하여 이미지에 적용합니다.
- 선택에 따라 블록 크기를 직접 설정하거나 자동 계산을 수행할 수 있습니다. 주어진 예시의 경우 5120 × 5120 픽셀 크기의 이미지가 사용되므로, 예를 들어 블록 크기를 48 × 34 픽셀로 설정하면 총 16157개의 블록이 생성되는데, 이는 사용 가능한 총 블록 수인 16384개보다 적은 수치입니다.
- 선택 사항으로 Linear extension을 지정하고 Edge handling을 Pixel, Half Block 또는 Block으로 설정할 수 있습니다.
- Calculate Correction Data - Store And Apply 버튼을 활성화하려면 계산 값을 저장할 위치를 지정하십시오.
- Calculate Correction Data - Store And Apply 버튼을 클릭합니다.
- 계산이 처리되고 지정된 폴더에 파일이 생성되며, 계산된 이득(gain) 및 오프셋(offset) 값이 이미지에 적용됩니다.
- 이미지 위의 View Options 드롭다운 목록 상자에서 미리보기 이미지에 적용할 FFC 값(게인 값, 오프셋 값, 둘 다 또는 없음)을 선택합니다.
- FFC 플러그인을 종료하려면 Finish를 클릭합니다.
-
The Line Profile 이제 균일한 이미지가 표시되며 고품질 이미지를 획득할 수 있습니다. 다음을 사용하십시오:
FFC mode parameterFFC를 켜거나 끕니다.
Framegrabber SDK에서 Flat-Field Correction 계산하기#
Basler는 Framegrabber SDK에서 플랫필드 보정 값을 계산하고 적용하는 데 도움이 되는 Python 스크립트를 제공합니다.
Basler Website에서 이러한 스크립트를 ZIP 파일로 다운로드할 수 있습니다. 패키지 포함 내용:
- 흑백 이미지용 스크립트 1개
- 컬러(Bayer) 이미지용 스크립트 1개
정보
컴퓨터를 다시 시작하거나 프레임 그래버 응용 프로그램을 열 때마다 FFC 설정을 프레임 그래버에 다시 로드해야 합니다. 프레임 그래버에는 휘발성 메모리가 있으므로 카메라의 User Sets와 달리 데이터를 저장할 수 없습니다.
플랫필드 보정 값을 계산하려면 이미지 경로와 매개변수에 맞게 Python 스크립트를 수정하십시오.
- 어두운 이미지 획득:
- 렌즈를 가리고 어두운 이미지(dark image)를 캡처합니다.
- 이미지를 컴퓨터에 저장합니다.
- 밝은 기준 이미지 획득(이득 보정용):
- 균일하게 밝은 물체(예: 흰 종이)를 렌즈 아래에 놓고 이미지를 캡처합니다.
- 이미지를 컴퓨터에 저장합니다.
-
Python 스크립트 편집:
- 텍스트 편집기에서 스크립트를 엽니다.
-
지정된 섹션에서 어두운 이미지와 밝은 이미지의 경로를 업데이트합니다.
################# 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) -
컬러 이미지의 경우, 이미지 경로 바로 아래에 있는 베이어 패턴도 다음과 같이 조정하십시오:
# Set bayerpattern bayerpattern = 'BayerBG8' -
다음 매개변수를
# set parameters:섹션:이러한 파라미터 값은 Enhanced Applets 또는 VisualApplets 디자인에서 얻을 수 있습니다. 앱렛에 액세스하려면 다음 툴 중 하나에서 엽니다:# 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- microDisplay X
- pylon Viewer
- VisualApplets
-
변경 사항을 저장하고 Python 스크립트를 실행합니다.
- 스크립트는 평탄도 보정에 필요한 게인 및 오프셋 값이 포함된 *.txt 파일을 생성합니다. 이 파일들은 Python 스크립트와 동일한 디렉토리에 저장됩니다.
게인 및 오프셋 값을 적용하려면:
- microDisplay X를 열고 Enhanced Applet을 로드합니다.
-
다음 파라미터 블록에서
FFC생성한 파일에서 오프셋 및 게인 값을 로드합니다:

-
게인 및 오프셋 파일이 저장된 디렉토리로 이동하여 적절한 파일을 선택합니다.
- 게인 및 오프셋 파일 모두에 대해, 그리고 이미지의 각 컬러 채널에 대해 이 단계를 반복합니다.
- 이미지 취득을 시작합니다.
-
다음 파라미터 블록에서
FFC Mode파라미터에서 다음을 선택하여Offset and Gain값을 적용합니다:
이제 취득한 이미지에 Flat-Field Correction이 적용됩니다.
VisualApplets을 사용하여 Flat-Field Correction 기능 사용자 지정하기#
VisualApplets에는 블록 기반 Flat-Field Correction을 계산하기 위한 디자인 예제가 포함되어 있습니다. Enhanced Applets의 표준 구현을 사용하는 대신 애플리케이션에 맞게 기능을 조정해야 하는 경우 이 예제를 사용하십시오. 자세한 내용과 저장 위치는 VisualApplets Tutorial을 참조하십시오.
VisualApplets의 예제 사용법은 Enhanced Applets 사용법과 유사합니다. 다음 단계를 따르십시오:
- Calculating Flat-Field Correction in the Framegrabber SDK에 설명된 대로 Enhanced Applets와 제공된 Python 스크립트를 사용하여 계수를 계산합니다.
- VisualApplets에서 Flat-Field Correction 예제 디자인을 엽니다.
-
VisualApplets에서 FFC 계층형 상자의 정적 파라미터를 구성합니다.
계층형 상자는 픽셀 Bit Width, Parallelism 및 이미지 형식에 자동으로 적응합니다. 먼저 입력 링크를 파라미터화해야 합니다. 정적 파라미터를 설정하기 전에 이 작업을 수행하는 것이 중요합니다.
허용되는 형식은 다음과 같습니다:
Bit width: 8 ~ 16Artithmetic: 부호 없음Parallelism: 1 ~ 64Kernel Columns,Kernel Rows: 1Color Format: VAF_GRAYColor Flavor: FL_NONEMax. Image Width: anyMax. Image Height: any
정적 파라미터는 블록 기반 FFC의 정밀도와 FPGA 리소스 사용량을 정의합니다:
OffsetBits: 오프셋 보정에 사용되는 비트 수를 정의합니다. 이는 정수 비트와 소수 비트의 합입니다.OffsetFractionalBits: 소수 자릿수 비트 수를 정의합니다. 고정 소수점 Arithmetic 설명은 다음 섹션을 참조하십시오. 보정 계수 오프셋 및 게인 로드.GainBits: 이득 보정에 사용되는 비트 수를 정의합니다. 이는 정수 비트와 소수 비트의 합입니다.GainFractionalBits: 소수 자릿수 비트 수를 정의합니다. 고정 소수점 Arithmetic 설명은 다음 섹션을 참조하십시오. 보정 계수 오프셋 및 게인 로드.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. pylonViewer에서 FFC 플러그인을 사용한 경우, 해당 값을 이 파라미터에 복사하십시오.EnoughBlocksForImageSize: 이 읽기 전용 파라미터는 정의된 최대 블록 수가 주어진 블록 크기 및 ROI 설정에 충분한지 여부를 나타냅니다.OffsetCoefficients: 오프셋 계수에 대한 필드 매개변수입니다. FFC pylon 플러그인에서 텍스트 파일을 업로드합니다. 형식에 대한 설명은 다음 섹션에서 확인할 수 있습니다. 보정 계수 오프셋 및 게인 로드.GainCoefficients: 오프셋 계수에 대한 필드 매개변수입니다. FFC pylon 플러그인에서 텍스트 파일을 업로드합니다. 형식에 대한 설명은 다음 섹션에서 확인할 수 있습니다. 보정 계수 오프셋 및 게인 로드.FlatFieldCorrectionMode: FFC 오프셋 및 이득을 켤지 끌지 선택합니다. 이는 이미지 취득 중에 수행할 수 있습니다.
-
VisualApplets의 디자인 타임 또는 SDK 애플리케이션(pylon API, GenApi, GenTL consumer 또는 Framegrabber SDK)의 런타임에 FFC 계층형 상자의 동적 파라미터를 구성합니다.
다음 스크린샷은 파라미터와 함께 VisualApplets에서 FFC 계층형 상자를 사용하는 모습을 보여줍니다.

배경 정보: 계산 공식#
다음 섹션에서는 FFC 값을 계산하는 데 사용되는 공식을 설명합니다. 이 정보는 참고용으로만 제공됩니다.
정보
Basler는 오류가 발생할 수 있으므로 이러한 값을 수동으로 계산하거나 pylon 또는 microDisplay X에 수동으로 입력하지 않을 것을 강력히 권장합니다. 대신 제공된 스크립트와 플러그인을 사용하십시오.
오프셋 및 게인 계수 결정#
보정 값을 계산하기 전에 몇 가지 준비 작업이 필요합니다.
- 조명은 가능한 한 균일해야 합니다.
- 렌즈 조리개와 초점은 올바르게 설정되어야 합니다.
- Exposure Time 역시 구성해야 합니다.
- 아날로그 게인 등 카메라의 모든 전처리기능을 구성해야 합니다.
- 카메라는 정상 작동 온도에서 실행되어야 합니다.
Offset#
보정을 위한 오프셋 계수 계산은 이 섹션에서 설명하는 몇 가지 개별 편차가 있는 표준 방식을 따릅니다.
DSNU 또는 센서 관련 오프셋을 보정하기 위한 오프셋 계수를 결정하려면 렌즈 캡을 닫는 등 센서가 빛을 전혀 받지 않는 상태의 카메라 이미지를 획득해야 합니다. 이론상 센서는 모두 0 값을 출력해야 하지만 DSNU로 인해 픽셀 값에 개별 오프셋이 있을 수 있습니다. 따라서 획득한 다크 이미지는 오프셋 필드, 즉 오프셋 계수를 나타냅니다.
DSNU는 카메라 설정 및 온도에 따라 달라지므로, 특히 Exposure 및 아날로그 게인 설정과 관련하여 실제 조건에서 이미지를 획득해야 합니다. 또한 노이즈를 제거하기 위해 여러 이미지의 평균값을 기반으로 오프셋 값을 도출해야 합니다.
D(x, y): 위치 x,y에서의 여러 이미지에 걸친 평균 다크 픽셀 값Offset(x, y)=D(x, y)
Gain#
애플리케이션에서 획득한 객체는 서로 다른 밝기 값을 가집니다. 이미지에서 흰색 또는 반사 부품과 같은 가장 밝은 부분을 식별해야 합니다. 이러한 부품이 포화 상태는 아니지만 포화 상태에 가깝도록 Exposure, 조리개 및 조명을 설정해야 합니다.(어두운 부분에만 관심이 있어서 그렇게 하고자 하는 경우가 아니라면 말입니다.)
예를 들어 어두운 배경에서 밝은 객체를 조사하려고 합니다. 이 경우 실제 전시 조건에서 렌즈 앞에 객체를 놓습니다. 조사한 객체의 가장 밝은 지점은 포화 상태가 아니어야 하지만 포화 상태에 가까워야 합니다. 예를 들어 8비트 이미지의 경우 약 240의 픽셀 값을 목표로 합니다. 다음으로, 동일한 밝기 값에 가까운 객체로 센서를 균일하게 조명해야 합니다. 예를 들어 이는 구조가 없는 흰색 종이일 수 있습니다. 마찬가지로 픽셀 중 어느 것도 포화 상태여서는 안 됩니다. 이러한 참조 이미지 중 일부를 기록하고 평균 이미지를 계산합니다. P(x,y).
다음으로, 게인 보정을 위한 참조 픽셀 값을 도출하는 여러 가지 방법이 존재합니다.
-
참조 이미지의 평균값: 다음의 가장 밝은 부분이
P(x,y)획득한 객체의 가장 밝은 부분과 일치합니다. 따라서P(x,y)의 평균 픽셀 값을 참조로 사용할 수 있습니다.PMean=Mean(P(x,y)).그러면 게인 계수는 다음과 같습니다.
$$ Gain(x,y) = \frac{PMean}{(P(x,y)-Offset(x,y))} $$
-
사용자 정의 참조 값 또는 가장 밝은 지점: 참조 이미지의 평균 밝기가 원하는 최대 픽셀 값과 같지 않은 경우, 사용자가 직접 참조 값을 정의할 수 있습니다. 이는 이미지에서 가장 밝은 지점의 값 또는 참조 대상과 참조 밝은 이미지 간의 차이가 될 수 있습니다. 그런 다음 균일한 이미지의 픽셀이 이 참조 값으로 보정되도록 게인 값이 계산됩니다.
PRef.\[ Gain(x,y) = \frac{PRef}{(P(x,y)-Offset(x,y))} \]
두 공식 모두 나눗셈을 수행하기 전에 이전에 결정된 오프셋을 뺍니다. 단, P(x,y) 이(가) 2단계 절차에서 이미 오프셋으로 보정된 경우 이는 수행하면 안 됩니다.
Bayer Pixel Format용 FFC#
Bayer Pixel Format의 경우, FFC는 RAW Bayer 이미지들을 RGB 또는 기타 색공간으로 변환하기 전에 처리됩니다. 이를 통해 최대 정밀도를 얻을 수 있습니다. 보정 계수 계산은 각 색상 구성요소별로 개별적으로 수행됩니다. 부수적인 효과로, 참조 이미지가 완벽한 흰색 이미지로 보정되므로 FFC는 색상 캘리브레이션도 수행합니다.
블록 기반 Flat-Field Correction 정의#
블록 기반 Flat-Field Correction은 각 개별 픽셀의 보정 값을 저장하기에 Memory가 충분하지 않을 때 사용됩니다. 이 경우 이미지는 사용자가 정의할 수 있는 크기의 블록으로 분할됩니다. 각 블록은 모서리에 자체 시작 오프셋 및 게인 계수를 가집니다.

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

이는 매우 정밀한 보정을 가져오지만, 특히 개별 픽셀 변동으로 인한 DSNU 및 PRNU의 경우 개별 픽셀을 보정할 수 없습니다.

블록 크기 및 앱릿 파라미터 값 수동 계산#
앱릿에서 블록 기반 FFC를 사용하려면 보정 값이 계산된 후 두 단계를 수행해야 합니다.
- 블록 크기를 구성합니다.
- 보정 계수를 프레임 그래버에 로드합니다.
블록 크기 구성#
해상도가 다른 모든 카메라를 프레임 그래버에 연결할 수 있으므로, 앱릿 구현은 다양한 해상도에 적응하도록 만들어졌습니다.
모든 블록의 크기는 같지만 정사각형일 필요는 없으며, 즉 높이와 너비가 다를 수 있습니다. 프레임 그래버는 오프셋 및 게인 보정 값을 위해 총 16384개의 블록을 제공합니다. 따라서 블록이 이미지 크기에 분배될 수 있도록 블록을 조정해야 합니다.
예: boost V boA5120-230cm은 5120 x 4096 픽셀의 해상도를 가집니다. 전체 해상도를 사용하려면 사용 가능한 16384개의 블록을 이 모든 블록에 분배해야 합니다.
블록이 반드시 정사각형 모양일 필요는 없습니다. X 방향의 음영이 Y 방향보다 더 강할 수 있으므로, X 방향에서는 더 작은 블록 크기를, Y 방향에서는 더 큰 블록 크기를 사용해야 할 수 있습니다.
다음 이미지는 X 방향의 해상도가 Y 방향보다 높은 정사각형이 아닌 블록을 보여줍니다.

16384개의 블록을 전체 이미지에 정사각형 블록으로 균등하게 분배하려면 다음 공식을 사용하세요.
- 이미지 너비:
W - 이미지 높이:
H - 총 블록 수:
N
이미지의 총 면적은 다음과 같습니다: 이미지 면적 = W x H
각 블록은 한 변의 길이가 s인 정사각형입니다. 한 블록의 면적은 다음과 같습니다: 블록 면적 = s2
블록 수는 다음과 같습니다:
찾으려면 s:
위의 예시의 경우: W = 5120, H = 4096, N = 16384:
앱릿에서 모든 블록 변의 길이를 구성할 수 있는 것은 아닙니다. 예를 들어, X 방향의 블록 크기는 16의 배수여야 합니다.
주어진 예시의 경우, 블록 크기는 Bx= 32로 내림됩니다.
블록 높이를 계산하려면 사용 가능한 블록을 완전히 활용하기 위해 정사각형이 아닌 블록을 고려해야 합니다.
s2 = X 방향 블록 크기 x Y 방향 블록 크기 = Bx x By
그런 다음 블록 높이는 다음과 같이 결정할 수 있습니다.
위의 예시에서 이는 다음과 같습니다.
실제로 사용되는 블록 수는 다음과 같습니다.
이제 앱릿 파라미터를 설정할 수 있습니다.
FlatFieldCorrectionBlockWidth= 32FlatFieldCorrectionBlockHeight= 40

오프셋 및 게인 보정 계수 로드#
각 블록에는 4개의 오프셋 및 게인 계수 값 세트 Q11, Q12, Q21, Q22가 필요합니다. 이 값들은 블록 가장자리의 서포트 포지션입니다.

블록의 끝 위치는 다음 블록의 시작 위치입니다. 따라서 현재 블록의 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
- Block 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 값은 특정 범위와 해상도를 가진 고정 소수점 값으로 표현됩니다. 앱릿에는 범위를 확인하기 위한 몇 가지 정보 매개변수가 있습니다.

주어진 예시에서 Gain 값은 다음과 같은 범위를 갖습니다.
즉, 이 앱릿은 최대 3.999까지의 Gain 보정을 허용합니다. 예를 들어, 50의 픽셀 값은 최대 50 x 3.999 = 199까지 보정될 수 있습니다.
부동 소수점 값을 고정 소수점 값으로 변환하려면 소수부 비트를 곱하고 [0,2GainBits - 1] 범위로 제한합니다(여기서 GainBits = GainInteger + GainFractional).
고정 소수점 값 Q11, Q12, Q21, Q22는 각 블록의 대형 정수 값에 추가됩니다.
또는 비트 시프트 연산으로 다음과 같습니다.
예를 들어, 부동 소수점 값:
위의 해상도를 사용하여 고정 소수점으로 변환됩니다.
앱릿 값은 다음과 같이 됩니다.
따라서 앱릿 매개변수 값은 다음과 같이 됩니다.
16진수 표현: