https://drive.google.com/file/d/1Oagxl2qh6rUlBocsKzmK5prL6qhHRHDx/view?usp=sharing adresinde vermiş olduğum resime filtre ve threshold sonrası elde ettim. Bu resimdeki objelerin bölgelerini belirlemek istiyorum. Fakat birleşik objelerde olduğu için kafam karıştı yardımcı olabilr msiniz
Bunun için Watershed transform kullanılabilir.
Aşağıdaki satırları kodunuza uyarlayarak sonuç elde edebilirsiniz:
Eroding=imerode(binary,strel('disk',integerValue));
D = bwdist(Eroding);
figure, imshow(D,[],'InitialMagnification','fit')
title('Distance transform of ~bw')
D = -D;
D(~erosion) = -Inf;
L = watershed(D);
Lrgb = label2rgb(L,'jet',[.5 .5 .5]);
figure
imshow(Lrgb,'InitialMagnification','fit')
title('Watershed transform of D')
figure,imshow(imfuse(Eroding,Lrgb))
axis([])
bw2 = ~bwareaopen(~Eroding, 12);
imshow(bw2)
D = -bwdist(~erosion);
figure,imshow(D,[])
Ld = watershed(~D);
figure,imshow(label2rgb(Ld))
bw2 = Eroding;
bw2(Ld == 0) = 0;
mask = imextendedmin(D,1);
D2 = imimposemin(D,mask);
Ld2 = watershed(D2);
bw3 = Eroding;
bw3(Ld2 == 0) = 0;
figure,
imshow(Eroding);
title('Segmentation','FontSize',fontSize)
Objelerin sayısını belirlemek için:
figure,imshow(image);
title('Labelling','FontSize',fontSize)
s=regionprops(logical(bw3),'Centroid','Area','MajorAxisLength','MinorAxisLength');
hold on
for k=1:numel(s)
c=s(k).Centroid;
text(c(1),c(2),sprintf('%d',k),…
'HorizontalAlignment','center',…
'VerticalAlignment','middle');
end
hold on
Merhaba yanıtınız için teşekkür ederim,
D(~erosion) = -Inf; kısmında Undefined function or variable 'erosion'. şeklinde hata almaktayım erosion değerini nasıl tanımlamalıyım
Merhaba,
D(~erosion) = -Inf; kısmında erosionu Eroding olacak. Bu düzeltmeden sonra çalışması lazım.
teşekkürler o kısmı düzelttikten sonra hata giderildi. Bir kaç soru daha sormak istiyorum aldığım çıktılarda https://drive.google.com/file/d/1DoB4W9eBaE1HXdxUqf9IupF-U1b_7w9_/view?usp=sharing adresine eklediğim boş bir görüntü alıyorum nerede hata yapılmış olabilir ?
objelerin sayısını belirlemek için verdiğiniz kodda text(c(1),c(2),sprintf(‘%d’,k),…
‘HorizontalAlignment’,’center’,…
‘VerticalAlignment’,’middle’);
end
şu kısımda beklenmeyen parantez hatası alıyorum ama dikkatle incelediğimde nerede hata olduğunu ben farkedemedim
S
Watershed transformda girilen threshold değeri (integerValue) yüksek gelmiş olabilir. Bu durumu 0-10 arası değerlerden başlayıp aşabilirsiniz.
figure,imshow(Image); title('Labelling','FontSize',fontSize) s=regionprops(logical(bw3),'Centroid','Area','MajorAxisLength','MinorAxisLength'); hold on for k=1:numel(s) c=s(k).Centroid; text(c(1),c(2),sprintf('%d',k),… 'HorizontalAlignment','center',… 'VerticalAlignment','middle'); end hold on
kısmında bir problem gözükmüyor. Bunun dışında bir parantez hatası olabilir mi?
Teşekkür ederim verdiğiniz yanıt için, halen
Watershed transform of D çıktısından açık mavi boş bir grafik almaktayım.
Bu kısım dışında ise şöyle bir problemim var halen gerçekten resimdeki obje sayısını elde edmiyorum çok daha fazla obje olduğunu buluyor program bunun sebebi ne olabilir
Bu durumda resim binary ise orjinal resim denemenizi öneririm. rgb2binary işlemi segmentasyonla sağlanır. Ya da koddaki bu satırları kaldırmayı deneyin.
izin verirseniz mail adresinizi verseniz size aldığım çıktı görüntülerini ve nerede hata aldığımın görüntülerini paylaşsam uygun olur mu