Matlab图像识别 提取图像轮廓问题。

我在毕业设计中遇到一个问题,就是每次想提取出图像的轮廓长和宽的时候,提取出来的都是图片的长和宽。举个例子,我想提取数字2的大小,就是拿四条切线切出来的2的大小,结果每次提取出来的都是图片的大小。
不清楚是不是因为我前面把图像压缩的缘故,把代码放在下面,希望大家帮忙出出主意。

%%%%%%%%%%%%%%%%%预处理算法%%%%%%%%%%%%%%%%%%%%%%%
f=imread('.\images\9\9-1.jpg');
%% 二值化
level=graythresh(f);
f=im2bw(f,level);
f=imresize(f,[256,300]);
%% 滤波去噪
h=1/10*[1,1,1;1,2,1;1,1,1];
f=filter2(h,f);
%% 膨胀
se=strel('disk',2);
f=imerode(f,se);
f=f<1;
f = bwmorph(f, 'thin', inf);
%%
bw=bwperim(f);
[y2temp x2temp]=size(bw) %%这句应该是提取边界的长和宽的,但是每次出来的都是压缩过的大小,即256*300

%%下面这段代码我想计算图像的上下左右切点的坐标,结果x1 x2 y1 y2还是图片本身的大小,1,256,1,300
x1=1;
y1=1;
x2=x2temp;
y2=y2temp;
cntB=1;
while(sum(bw(:,cntB))==y2temp)
x1=x1+1;
cntB=cntB+1;
end
cntB=1;
while(sum(bw(cntB,:))==x2temp)
y1=y1+1;
cntB=cntB+1;
end
cntB=x2temp;
while(sum(bw(:,cntB))==y2temp)
x2=x2-1;
cntB=cntB-1;
end
cntB=y2temp;
while(sum(bw(cntB,:))==x2temp)
y2=y2-1;
cntB=cntB-1;
end

希望大家不吝赐教。多谢

第1个回答  推荐于2016-05-04
我帮你改了一下代码,你把bw=bwperim(f);(包括这句)以后的代码都去掉,用我给你写的这个,就可以提取出图像上下左右边界的坐标了。
[x,y]=size(f);
for i=1:x
f(i,2)=0;
f(i,y-1)=0;
end
for j=1:y
f(2,j)=0;
f(3,j)=0;
f(x-1,j)=0;
f(x-2,j)=0;
end
[m1,n1]=find(f);
maxx=max(m1);
maxy=max(n1);
minx=min(m1);
miny=min(n1);

你可以输出一下看看是不是你想要的结果,希望对你能有所帮助。O(∩_∩)O本回答被提问者采纳
相似回答