今回は前回の訂正から入らねばなりませぬ。前回「モフォロジー」と記してましたが「モルフォロジー」と記すのが良いようです。またバッサリ2値白黒画像の処理と断定してましたが、カラー画像にも適用可能です。ステンシルプレートのような2値画像に適用する場合が「応用し易い」だけのこと。お詫びして訂正させていただきます。
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上の Scilab2024.0.0およびScilab上のScilab IPCVツールボックスを使用させていただいております。
前回実施のerode(収縮)処理をカラー画像に適用
前回、白黒2値画像に処理を適用しただけであった処理をカラー画像に適用した例としてErode(収縮)処理を行ってみます。モデルはいつものお猿様。
imB = imread(fullpath(getIPCVpath() + "/images/" + 'baboon.png')); se5 = imcreatese('rect',5,5); imBerode = imerode(imB, se5); subplot(121); imshow(imB); subplot(122); imshow(imBerode);
結果が以下に。左がオリジナルで右がimerode処理したものです。右の方が「明るいエリアが収縮している」雰囲気でてますかね。目玉のところがそんな気がしますが。
bwborder処理
関数のいくつかはカラー画像も処理できることは分かりましたが、やっぱり2値画像はこのカテゴリの中心みたいです。2値画像からボーダー(境界)を抽出するための関数 bwborder の例が以下に。
C = imread(fullpath(getIPCVpath() + "/images/" + 'coins_gray.jpg')); Cbw = im2bw(C, 0.5); CbwB = bwborder(Cbw, 4); SQ = imread(fullpath(getIPCVpath() + "/images/big_sq.png")); SQbw = im2bw(SQ, 0.5); SQbwB = bwborder(SQbw, 4); subplot(231); imshow(C); subplot(232); imshow(Cbw); subplot(233); imshow(CbwB); subplot(234); imshow(SQ); subplot(235); imshow(SQbw); subplot(236); imshow(SQbwB);
結果画像が以下に。左からオリジナル、2値化画像、そしてbwborder適用後です。右端でボーダーが白抜きになっているのが分かりますな。
トップハット、ブラックハットって何よ?
前回練習していなかった関数に
-
- imtophat
- imblackhat
なる関数どもがあります。こいつらは「周囲に対して相対的に」明るい部分を強調するのがトップハット、暗い部分を抜き出すのがブラックハットってことみたいです。処理例が以下に。
S = imread(fullpath(getIPCVpath() + "/images/morpex.png")); se = imcreatese('ellipse',9,9); STop = imtophat(S,se); SBlack = imblackhat(S,se); IBTop = imtophat(imB,se); IBBlack = imblackhat(imB,se); subplot(231); imshow(S); subplot(232); imshow(STop); subplot(233); imshow(SBlack); subplot(234); imshow(imB); subplot(235); imshow(IBTop); subplot(236); imshow(IBBlack);
画像が以下に、左からオリジナル、中がトップハット、右がブラックハットです。上段の2値画像例だけ見ているとナンジャラホイという感じですが、下段のお猿様のご尊顔、とくに目のあたりを見ると、トップハット、ブラックハットの効果の違いが明らかではないかと。
imlabelとimblobprop
最後に手習ひしてみるのが以下の2関数です。
-
- imlabel
- imblobprop
お惚け老人が言葉で説明するより、処理例みていただく方が分かり易いかと。
これを2値化した上に「膨張」処理したものが以下に。
上記の2値画像を imlabelにかけて「塗分け」してもらうと以下のごとし。ぬりわけられている穴ぼこ(染み)をblobというみたい。
さらに、上記を imblobprop に食わせると、それぞれのblobの属性(位置)を求めてくれるみたいデス。こんな感じ。
ちょっと最後の方はインテリジェンスが少し高くなったような、そうでもないような。。。