Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

imflatfield

2 次元イメージのフラットフィールド補正

説明

J = imflatfield(I,sigma) はフラットフィールド補正をグレースケール イメージまたは RGB イメージ I に適用します。この補正は、標準偏差が sigma のガウス平滑化を使用して I のシェーディング成分を近似します。補正後のイメージが J に返されます。

J = imflatfield(I,sigma,mask) はバイナリ マスクが true の場合のみ、フラットフィールド補正をイメージ I に適用します。マスクが false の場合、出力イメージ J にはイメージ I の変更されていない値が含まれます。

J = imflatfield(___,'FilterSize',filterSize) はガウス平滑化フィルターのサイズを指定します。

すべて折りたたむ

グレースケール イメージを読み込みます。このイメージには、左側と右上隅に著しいシェーディング歪みがあります。

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

Figure contains an axes. The axes 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. The axes with title Flat-Field Corrected Image, \sigma = 30 contains an object of type image.

口径食またはコーナーの暗化があるカラー イメージを読み込みます。

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

Figure contains an axes. The axes 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. The axes with title Flat-Field Corrected Image, \sigma = 20 contains an object of type image.

カラー イメージを読み込みます。このイメージでは、右下隅にシェーディング欠陥があります。

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

Figure contains an axes. The axes 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. The axes with title Flat-Field Corrected Image, \sigma = 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. The axes 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. The axes with title Flat-Field Corrected Background, \sigma = 25 contains an object of type image.

入力引数

すべて折りたたむ

歪んだイメージ。m 行 n 列の 2 次元グレースケール イメージまたは m x n x 3 の 2 次元 RGB イメージとして指定します。

データ型: single | double | int16 | uint8 | uint16

ガウス平滑化フィルターの標準偏差。正の数値または正の数値の 2 要素ベクトルとして指定します。スカラーを指定した場合、imflatfield は正方形ガウス カーネルを使用します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

バイナリ マスク。m 行 n 列の 2 次元の数値行列または logical 行列として指定します。数値入力の場合、非ゼロのピクセルは 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 で導入