주요 콘텐츠

imflatfield

2차원 영상 플랫 필드 보정

설명

J = imflatfield(I,sigma)는 회색조 영상 또는 RGB 영상 I에 플랫 필드 보정을 적용합니다. 이 보정에서는 I의 음영 성분을 근사하기 위해 표준편차가 sigma인 가우스 평활화를 사용합니다. 보정된 영상은 J로 반환됩니다.

예제

J = imflatfield(I,sigma,mask)는 영상 I에서 이진 마스크가 true인 부분에만 플랫 필드 보정을 적용합니다. 마스크가 false인 경우 출력 영상 J는 영상 I의 수정되지 않은 값을 포함합니다.

예제

J = imflatfield(___,'FilterSize',filterSize)는 가우스 평활화 필터의 크기를 지정합니다.

예제

모두 축소

회색조 영상을 불러옵니다. 이 영상의 왼쪽과 오른쪽 상단 코너에 심각한 음영 왜곡이 있습니다.

I = imread('printedtext.png');
imshow(I)
title('Distorted Image')

Figure contains an axes object. The hidden axes object with title Distorted Image contains an object of type image.

플랫 필드 보정을 수행합니다.

sigma = 30;
Iflatfield = imflatfield(I,sigma);

결과를 표시합니다. 보정된 영상의 밝기가 더 균일합니다.

imshow(Iflatfield)
title(['Flat-Field Corrected Image, \sigma = ',num2str(sigma)])

Figure contains an axes object. The hidden axes object with title Flat-Field blank Corrected blank Image, blank sigma blank = 30 contains an object of type image.

비네팅 결함이 있는, 즉 코너로 갈수록 영상이 어두워지는 컬러 영상을 불러옵니다.

I = imread('fabric.png');
imshow(I)
title('Image with Vignetting')

Figure contains an axes object. The hidden axes object with title Image with Vignetting contains an object of type image.

플랫 필드 보정을 수행합니다.

sigma = 20;
Iflatfield = imflatfield(I,sigma);

결과를 표시합니다. 보정된 영상의 밝기가 더 균일합니다.

imshow(Iflatfield)
title(['Flat-Field Corrected Image, \sigma = ',num2str(sigma)])

Figure contains an axes object. The hidden axes object with title Flat-Field blank Corrected blank Image, blank sigma blank = 20 contains an object of type image.

컬러 영상을 불러옵니다. 이 영상의 오른쪽 아래 코너에 음영 결함이 있습니다.

I = imread('hands1.jpg');
imshow(I)
title('Image with Dark Corner')

Figure contains an axes object. The hidden axes object with title Image with Dark Corner contains an object of type image.

전체 영상에 플랫 필드 보정을 적용해 봅니다.

sigma = 25;
Iflatfield = imflatfield(I,25);
imshow(Iflatfield)
title(['Flat-Field Corrected Image, \sigma = ',num2str(sigma)])

Figure contains an axes object. The hidden axes object with title Flat-Field blank Corrected blank Image, blank sigma blank = 25 contains an object of type image.

코너의 음영 결함은 보정되었지만, 영상 중심이 너무 밝고 손의 색이 달라졌습니다. 이 과도하게 밝아지는 아티팩트를 방지하기 위해, 플랫 필드 보정을 영상의 배경에만 적용합니다.

이 영상의 마스크를 불러옵니다. 원래 마스크 maskHand에서는 분할된 손이 관심 영역(ROI)입니다. 배경이 ROI가 되도록 마스크를 반전합니다. 마스크를 표시합니다. ROI가 흰색으로 표시됩니다.

maskHand = imread('hands1-mask.png');
maskBackground = ~maskHand;
imshow(maskBackground)
title('Background Mask')

Figure contains an axes object. The hidden axes object with title Background Mask contains an object of type image.

마스크 maskBackground를 사용하여 영상의 배경에 대해 플랫 필드 보정을 수행합니다. 마스크에서 손은 관심 영역이 아니므로, 손의 픽셀에는 플랫 필드 보정이 적용되지 않습니다.

Iflatfield2 = imflatfield(I,sigma,maskBackground);

보정된 영상을 표시합니다. 코너의 음영 결함이 보정되었으며, 손의 색도 그대로 유지됩니다.

imshow(Iflatfield2)
title(['Flat-Field Corrected Background, \sigma = ',num2str(sigma)])

Figure contains an axes object. The hidden axes object with title Flat-Field blank Corrected blank Background, blank sigma blank = 25 contains an object of type image.

입력 인수

모두 축소

왜곡된 영상으로, 크기가 m×n인 2차원 회색조 영상 또는 m×n×3인 2차원 RGB 영상으로 지정됩니다.

데이터형: single | double | int16 | uint8 | uint16

가우스 평활화 필터의 표준편차로, 양수 또는 양수 요소를 2개 가진 벡터로 지정됩니다. 스칼라를 지정하면 imflatfield는 정사각 가우스 커널을 사용합니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

이진 마스크로, 크기가 m×n인 2차원 숫자형 또는 논리형 행렬로 지정됩니다. 숫자형 입력값의 경우 0이 아닌 픽셀은 1(true)로 간주됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

가우스 필터의 크기로, 스칼라 또는 양의 홀수 정수로 구성된 요소를 2개 가진 벡터로 지정됩니다. 스칼라를 지정하면 imflatfield는 정사각 필터를 사용합니다. 디폴트 필터 크기는 2*ceil(2*sigma)+1입니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

출력 인수

모두 축소

보정된 영상으로, 입력 영상 I와 크기 및 데이터형이 같은 2차원 회색조 영상 또는 RGB 영상으로 반환됩니다.

  • I가 RGB 영상인 경우 imflatfieldrgb2hsv를 사용하여 영상을 HSV 컬러스페이스로 변환하고 HSV 명도 채널에 플랫 필드 보정을 적용합니다. 영상은 hsv2rgb를 사용하여 다시 RGB 컬러스페이스로 변환됩니다.

  • mask를 지정할 경우, imflatfield는 플랫 필드 추정 중에 경계의 아티팩트를 줄이기 위해 마스크를 팽창시키고 영상 경계선을 채웁니다.

버전 내역

R2018b에 개발됨

참고 항목

|