不均一な照度の補正と前景オブジェクトの解析
この例では解析の前処理手順として▪▪メ▪▪ジを強調する方法を説明します。この例では,背景の不均一な照度を補正し,イメージをバイナリイメージに変換して前景オブジェクト(1つ1つの米粒)を識別しやすくします。その後,各米粒の面積を求めるなど,オブジェクトを分析し,イメージ内のすべてのオブジェクトの統計量を計算できます。
メ,ジの前処理
。
I = imread(“rice.png”);imshow(我)
背景の照度は,。。
最初の手順として,モルフォロジ,オ,プニングを実行してすべての前景(米粒)を削除します。オ,プニング演算により,構造化要素を完全に含めることのできない小さいオブジェクトは削除されます。半径が15である円板状の構造化要素を定義し,1の米粒内に完全に収まるようにします。
Se = strel(“磁盘”15)
se = strel是一个圆盘形状的结构元素,其属性:邻域:[29x29 logical]维数:2
モルフォロジ,オ,プニングを実行するには,imopen
と構造化要素を併用します。
background = imopen(I,se);imshow(背景)
元の▪▪メ▪▪ジ我
から背景の近似▪▪メ▪▪ジ背景
を減算し,結果の。元の▪▪メ▪▪ジから調整後の背景のイメージを減算すると、結果のイメージは背景が均一になりますが、解析対象としては少し暗くなります。
I2 = I -背景;imshow (I2)
処理後の▪▪メ▪▪ジI2
のコントラストを増大させるには,関数imadjust
を使用してデ,タを低強度と高強度の1%で飽和させ,強度値をuint8
のダ@ @ナミックレンジ全体に拡大します。
I3 = imadjust(I2);imshow (I3)
前の2の手順は,imtophat
を使用する1の手順に置き換えできることに注意してください。この関数は,最初にモルフォロジオプニングを計算してから元のメジから抽出します。
I2 = imtophat(I,strel('disk',15));
処理後のイメージのバイナリバージョンを作成して,解析にツールボックス関数を使用できるようにします。関数imbinarize
を使用し,グレスケルメジをバナリメジに変換します。関数bwareaopen
を使用して,。
bw = imbinalize (I3);Bw = bwareaopen(Bw,50);imshow (bw)
メ,ジ内のオブジェクトの識別
元のメジのバナリバジョンが作成されました。このバ,ジョンで;
バ▪▪ナリ▪▪メジ内のすべての連結要素(オブジェクト)。結果の精度は,オブジェクトのサイズ,連結性パラメーター(4、8または任意の数),およびオブジェクトが接しているかどうか(接している場合,1つのオブジェクトとしてラベル付けされる場合があります)によって異なります。バ@ @ナリ@ @メ@ @ジbw
内の米粒のいくかは接触しています。
Cc = bwconncomp(bw,4)
cc =带字段的结构:连接性:4 ImageSize: [256 256] NumObjects: 95 PixelIdxList: {1x95 cell}
cc.NumObjects
Ans = 95
@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @
Grain = false(size(bw));grain(cc.PixelIdxList{50}) = true;imshow(粮食)
ラベル行列を作成して,疑似色のインデックス付きイメージとして表示することで,イメージ内のすべての連結要素を可視化します。
関数labelmatrix
を使用して,関数bwconncomp
の出力からラベル行列を作成します。関数labelmatrix
は,オブジェクト数に必要な最小の数値クラスでラベル行列を格納することに注意してください。
标签= labelmatrix(cc);谁标签
名称大小字节类属性标签256x256 65536 uint8
関数label2rgb
を使用して,カラーマップ,背景色,ラベル行列の中のオブジェクトがカラーマップの中の色にどのようにマップされるかを指定します。疑似カラーイメージでは,ラベル行列の各オブジェクトを識別するラベルがそれぞれ関連カラーマップ行列内の異なる色にマップされます。
RGB_label = label2rgb(标签,“春天”,“c”,“洗牌”);imshow (RGB_label)
面積ベ,スの統計量の計算
関数regionprops
を使用して▪▪メ▪▪ジ内の各オブジェクトの面積を計算します。各米粒は構造体cc
内では1の連結要素です。
Graindata = regionprops(cc,“基本”)
graindata =95×1包含字段的struct数组:区域质心边界框
新しいベクトルgrain_areas
を作成します。これは各粒の測定面積を保持します。
grain_areas = [graindata.Area];
50番目の要素の面積を求めます。
grain_areas (50)
Ans = 194
最小面積の粒を特定して表示します。
[min_area, idx] = min(grain_areas)
Min_area = 61
Idx = 16
Grain = false(size(bw));grain(cc.PixelIdxList{idx}) = true;imshow(粮食)
柱状图
コマンドを使用して米粒の面積のヒストグラムを作成します。
直方图(grain_areas)标题(“米粒面积直方图”)
参考
imopen
|bwareaopen
|bwconncomp
|regionprops
|imadjust
|imbinarize
|label2rgb
|labelmatrix
|imread
|imshow