Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 倍频程:Kmeans群集不处理图像矩阵_Matlab_Image Processing_Machine Learning_Octave_K Means - Fatal编程技术网

Matlab 倍频程:Kmeans群集不处理图像矩阵

Matlab 倍频程:Kmeans群集不处理图像矩阵,matlab,image-processing,machine-learning,octave,k-means,Matlab,Image Processing,Machine Learning,Octave,K Means,我尝试了以下代码 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_regio

我尝试了以下代码

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);
img=imread(“test1.jpg”);
gimg=RGB2灰色(img);
imshow(gimg);
bw=gimg<255;
L=bw标签(bw);
imshow(label2rgb(L,@jet,[7.7.7]))
s=区域属性(L,‘像素idxlist’、‘像素列表’);
像素列表(1:4,:)
idx=s(1)。像素idxlist;
sum_region1=sum(gimg(idx));
x=s(1)。像素列表(:,1);
y=s(1)。像素列表(:,2);
xbar=sum(x.*double(gimg(idx)))/sum\u区域1
ybar=sum(y.*double(gimg(idx)))/sum\u区域1
等等
对于k=1:numel(s)
idx=s(k).像素idxlist;
像素_值=双(gimg(idx));
总和像素值=总和(像素值);
x=s(k).像素列表(:,1);
y=s(k).像素列表(:,2);
xbar=总和(x.*像素值)/总和像素值;
ybar=总和(y.*像素值)/总和像素值;
绘图(xbar,ybar,“*”)
结束
拖延
a=圆形(xbar)-90;
b=圆形(xbar)+90;
c=圆形(ybar)-90;
d=圆形(ybar)+90;
roi=gimg(a:b,c:d);
imshow(roi);
投资回报率(:,:,2)=0;
投资回报率(:,:,3)=0;
se=strel('立方体',20);
closeBW=imclose(roi,se);
图形
imshow(closeBW);
de=rgb2gray(闭合BW);
ed=边缘(de,“canny”);
imshow(ed);
j=kmeans(ed,3);
我所做的是拍摄一幅图像并提取其灰度。我将注意力集中在图像中强度非常高的部分。然后,我提取图像的红色分量,然后对结果图像进行关闭操作。之后,我使用canny方法进行边缘检测。然后,我尝试对边缘检测结果使用kmeans

我得到一个错误,说kmeans需要实矩阵。
请帮忙

MATLAB/Octave中的
edge
返回一个二进制/
逻辑
矩阵
kmeans
要求输入为
double
single
矩阵

因此,只需将
ed
转换为
double
并继续:

ed=edge(de,"canny");
imshow(ed);
ed = double(ed); %// Change
j=kmeans(ed,3);

没问题。祝你好运