关于matlab图像处理的问题
我想求二值化图像后的最大8连通域的像素总和除以其城市距离,但是有的图像可以行,有的图像却提示错误,不知道为什么,恳请朋友帮我找找错。以下是我用到的图像和程序:图像:程序:...
我想求二值化图像后的最大8连通域的像素总和除以其城市距离,但是有的图像可以行,有的图像却提示错误,不知道为什么,恳请朋友帮我找找错。以下是我用到的图像和程序:
图像:
程序:
clear all;
clc;
I = imread('D:\Program Files\MATLAB\R2013a\bin\work\绝缘子样本\污秽\4.bmp');
I=im2double(I);
I=rgb2gray(I);
%%%%%%%%%%%%%%%%%%%%%%
%高斯滤波
h=fspecial('average',3);
I=imfilter(I,h,'corr','replicate');
%%%%%%%%%%%%%%%%%%%%%
%I=1-I;
figure(1);
imshow(I);
Ibw=im2bw(I,0.5);
%Ibw=1-Ibw;
figure(2);
imshow(Ibw);
se=strel('square',3);
Ibw1=imerode(Ibw,se);
Ibw=Ibw-Ibw1;
%Ibw=edge(Ibw,'sobel');
[x1,x2]=size(Ibw);%%求二值图像的大小
figure(3), imshow(Ibw)% 得到8.24(b)
hold on
[L, num] = bwlabel(Ibw, 8); % 标注连通分量 针对Ibw
[y1,y2]=size(L);
disp(['图中共有' num2str(num) '个连通分量'])
% 找出最大的连通分量(嘴)
max = 0; % 当前最大连通分量的大小
indMax = 0; % 当前最大连通分量的索引
for k = 1:num
[y x] = find(L == k); % 找出编号为k的连通区的行索引集合y和列索引集合x
nSize = length(y); %计算该连通区中的像素数目
if(nSize > max)
max = nSize;
indMax = k;
end
end
if indMax == 0
disp('没有找到连通分量')
return
end
% 计算并显示最大连通分量正序起始点和倒序的起始点
[y x] = find(L == indMax);
for i=1:1:x1
for j=1:1:x2
if L(i,j)==indMax
X_1=i;
Y_1=j;
break;
end
end
break;
end
for i=x1:-1:1
for j=x2:-1:1
if L(i,j)==indMax
X_2=i;
Y_2=j;
break;
end
end
break;
end
Sum4=size(y,1);%%%区域标号为indMax的像素点总数!!!!!!!!!!!!!!!!
city_length=abs(X_1-X_2)+abs(Y_1-Y_2);%%两点之间的城市距离
AAAAA=Sum4/city_length;%%所求结果
求这个图像的时候总是出现“Undefined function or variable 'X_1'.”这个错误,希望大家帮我解决下。谢谢了!!! 展开
图像:
程序:
clear all;
clc;
I = imread('D:\Program Files\MATLAB\R2013a\bin\work\绝缘子样本\污秽\4.bmp');
I=im2double(I);
I=rgb2gray(I);
%%%%%%%%%%%%%%%%%%%%%%
%高斯滤波
h=fspecial('average',3);
I=imfilter(I,h,'corr','replicate');
%%%%%%%%%%%%%%%%%%%%%
%I=1-I;
figure(1);
imshow(I);
Ibw=im2bw(I,0.5);
%Ibw=1-Ibw;
figure(2);
imshow(Ibw);
se=strel('square',3);
Ibw1=imerode(Ibw,se);
Ibw=Ibw-Ibw1;
%Ibw=edge(Ibw,'sobel');
[x1,x2]=size(Ibw);%%求二值图像的大小
figure(3), imshow(Ibw)% 得到8.24(b)
hold on
[L, num] = bwlabel(Ibw, 8); % 标注连通分量 针对Ibw
[y1,y2]=size(L);
disp(['图中共有' num2str(num) '个连通分量'])
% 找出最大的连通分量(嘴)
max = 0; % 当前最大连通分量的大小
indMax = 0; % 当前最大连通分量的索引
for k = 1:num
[y x] = find(L == k); % 找出编号为k的连通区的行索引集合y和列索引集合x
nSize = length(y); %计算该连通区中的像素数目
if(nSize > max)
max = nSize;
indMax = k;
end
end
if indMax == 0
disp('没有找到连通分量')
return
end
% 计算并显示最大连通分量正序起始点和倒序的起始点
[y x] = find(L == indMax);
for i=1:1:x1
for j=1:1:x2
if L(i,j)==indMax
X_1=i;
Y_1=j;
break;
end
end
break;
end
for i=x1:-1:1
for j=x2:-1:1
if L(i,j)==indMax
X_2=i;
Y_2=j;
break;
end
end
break;
end
Sum4=size(y,1);%%%区域标号为indMax的像素点总数!!!!!!!!!!!!!!!!
city_length=abs(X_1-X_2)+abs(Y_1-Y_2);%%两点之间的城市距离
AAAAA=Sum4/city_length;%%所求结果
求这个图像的时候总是出现“Undefined function or variable 'X_1'.”这个错误,希望大家帮我解决下。谢谢了!!! 展开
展开全部
for i=1:1:x1
for j=1:1:x2
if L(i,j)==indMax
X_1=i;
Y_1=j;
break;
end
end
break;
end
for i=x1:-1:1
for j=x2:-1:1
if L(i,j)==indMax
X_2=i;
Y_2=j;
break;
end
end
break;
end
删掉这个部分。
换成
X_1 = x(1);
Y_1 = y(1);
X_2 = x(end);
Y_2 = y(end);
for j=1:1:x2
if L(i,j)==indMax
X_1=i;
Y_1=j;
break;
end
end
break;
end
for i=x1:-1:1
for j=x2:-1:1
if L(i,j)==indMax
X_2=i;
Y_2=j;
break;
end
end
break;
end
删掉这个部分。
换成
X_1 = x(1);
Y_1 = y(1);
X_2 = x(end);
Y_2 = y(end);
展开全部
出错的原因可能是x1的计算结果有异,导致
for i=1:1:x1
for j=1:1:x2
if L(i,j)==indMax
X_1=i;
以上程序执行时X_1=i;的赋值操作出错,检测一下该图[x1,x2]=size(Ibw);的计算结果。
for i=1:1:x1
for j=1:1:x2
if L(i,j)==indMax
X_1=i;
以上程序执行时X_1=i;的赋值操作出错,检测一下该图[x1,x2]=size(Ibw);的计算结果。
更多追问追答
追答
这张的白色轨迹是不闭合的,提示错误的是闭合的,试试看是不是所有白色轨迹不闭合的可以,另外再找一张闭合的对比测试下哈(比如中间那个白框换成圆圈)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询