1
我試過下面的代碼。Octave:Kmeans集羣不能在圖像矩陣上工作
img=imread("test1.jpg");
gimg=rgb2gray(img);
imshow(gimg);
bw = gimg < 255;
L = bwlabel(bw);
imshow(label2rgb(L, @jet, [.7 .7 .7]))
s = regionprops(L, 'PixelIdxList', 'PixelList');
s(1).PixelList(1:4, :)
idx = s(1).PixelIdxList;
sum_region1 = sum(gimg(idx));
x = s(1).PixelList(:, 1);
y = s(1).PixelList(:, 2);
xbar = sum(x .* double(gimg(idx)))/sum_region1
ybar = sum(y .* double(gimg(idx)))/sum_region1
hold on
for k = 1:numel(s)
idx = s(k).PixelIdxList;
pixel_values = double(gimg(idx));
sum_pixel_values = sum(pixel_values);
x = s(k).PixelList(:, 1);
y = s(k).PixelList(:, 2);
xbar = sum(x .* pixel_values)/sum_pixel_values;
ybar = sum(y .* pixel_values)/sum_pixel_values;
plot(xbar, ybar, '*')
end
hold off
a=round(xbar)-90;
b=round(xbar)+90;
c=round(ybar)-90;
d=round(ybar)+90;
roi=gimg(a:b,c:d);
imshow(roi);
roi(:,:,2)=0;
roi(:,:,3)=0;
se = strel('cube',20);
closeBW = imclose(roi,se);
figure
imshow(closeBW);
de=rgb2gray(closeBW);
ed=edge(de,"canny");
imshow(ed);
j=kmeans(ed,3);
我沒有什麼是拍攝圖像和提取其grayscale.I集中在具有圖像的所述部分非常高intensity.I然後把該圖像的紅色成分,然後所得到的圖像上施加的閉合操作然後我使用canny方法進行邊緣檢測。然後我嘗試在邊緣檢測的結果上使用kmeans。
我得到一個錯誤,說kmeans需要真正的矩陣。 幫助將不勝感激。
它的工作謝謝。 –
完全沒問題。祝你好運! – rayryeng