5

主なタスクは、葉の複雑な背景を除去し、MATLAB で隠れている葉の画像から目的の葉を抽出することです。バックグラウンドを排除するために、K-means クラスタリング アルゴリズムを適用しました。ここでの主なタスクは、流域セグメンテーション アルゴリズムを使用して、閉塞した葉から葉をセグメント化することです。すべてのリーフに最適なセグメントを見つけることはできません。私を助けてください。サンプル画像と流域セグメンテーション コードをアップロードしました。

元の画像 ここに画像の説明を入力

K-Means クラスタリング アルゴリズムと分水界を使用して背景を除去した後の画像 元の画像に重ね合わせたセグメンテーション ここに画像の説明を入力

私はそれを抽出できるように、メインの中間の葉を単一のセグメントにしたいと考えています。

私は以下の流域セグメンテーションコードを与えました

function wateralgo(img)

F=imread(img);

F=im2double(F);

%Converting RGB image to Intensity Image
r=F(:,:,1);
g=F(:,:,2);
b=F(:,:,3);
I=(r+g+b)/3;
imshow(I);

%Applying Gradient
hy = fspecial('sobel');
hx = hy';
Iy = imfilter(double(I), hy, 'replicate');
Ix = imfilter(double(I), hx, 'replicate');
gradmag = sqrt(Ix.^2 + Iy.^2);
figure, imshow(gradmag,[]), title('Gradient magnitude (gradmag)');

L = watershed(gradmag);
Lrgb = label2rgb(L);
figure, imshow(Lrgb), title('Watershed transform of gradient magnitude (Lrgb)');

se = strel('disk',20);
Io = imopen(I, se);
figure, imshow(Io), title('Opening (Io)');
Ie = imerode(I, se);
Iobr = imreconstruct(Ie, I);
figure, imshow(Iobr), title('Opening-by-reconstruction (Iobr)');

Ioc = imclose(Io, se);
figure, imshow(Ioc), title('Opening-closing (Ioc)');

Iobrd = imdilate(Iobr, se);
Iobrcbr = imreconstruct(imcomplement(Iobrd), imcomplement(Iobr));
Iobrcbr = imcomplement(Iobrcbr);
figure, imshow(Iobrcbr), title('Opening-closing by reconstruction (Iobrcbr)');

fgm = imregionalmin(Iobrcbr);
figure, imshow(fgm), title('Regional maxima of opening-closing by reconstruction (fgm)');

I2 = I;
I2(fgm) = 255;
figure, imshow(I2), title('Regional maxima superimposed on original image (I2)');

se2 = strel(ones(7,7));
fgm2 = imclose(fgm, se2);
fgm3 = imerode(fgm2, se2);
fgm4 = bwareaopen(fgm3, 20);
I3 = I;
I3(fgm4) = 255;
figure, imshow(I3), title('Modified regional maxima superimposed on original image (fgm4)');

bw = im2bw(Iobrcbr, graythresh(Iobrcbr));
figure, imshow(bw), title('Thresholded opening-closing by reconstruction (bw)');

D = bwdist(bw);
DL = watershed(D);
bgm = DL == 0;
figure, imshow(bgm), title('Watershed ridge lines (bgm)');

gradmag2 = imimposemin(gradmag, bgm | fgm4);
L = watershed(gradmag2);
I4 = I;
I4(imdilate(L == 0, ones(3, 3)) | bgm | fgm4) = 255;
figure, imshow(I4), title('Markers and object boundaries superimposed on original image (I4)');

Lrgb = label2rgb(L, 'jet', 'w', 'shuffle');
figure, imshow(Lrgb), title('Colored watershed label matrix (Lrgb)');

figure, imshow(I), hold on
himage = imshow(Lrgb);
set(himage, 'AlphaData', 0.3);
title('Lrgb superimposed transparently on original image');
end
4

2 に答える 2

2

一般的なセグメンテーションではなく、前景抽出アルゴリズムを試してみるべきだと思います。そのようなアルゴリズムの1つがGrabCutです。役立つもう1つのことは、前景オブジェクトを抽出する前に、画像表現である程度の照明分散を実現することです。そのための1つの方法は、 Chong色空間で作業することです。

于 2012-05-08T08:30:21.393 に答える
0

ユーザーからの対話が可能な場合、セグメンテーションは GrabCut (@Victor May で言及) またはより基本的なインタラクティブなグラフ cutのいずれかを使用すると、はるかに優れたものになります。

そうしないと、さまざまな画像に対して自動セグメンテーションを完璧に行うことが非常に困難になります。おそらく、類似度メトリックに基づいて (または 2 つのセグメント間の勾配の強さに基づいて?)、隣接する領域を比較およびマージする後処理を試すことができます。

于 2012-05-30T15:25:18.387 に答える