Matlab图像识别 提取图像轮廓问题。
我在毕业设计中遇到一个问题,就是每次想提取出图像的轮廓长和宽的时候,提取出来的都是图片的长和宽。举个例子,我想提取数字2的大小,就是拿四条切线切出来的2的大小,结果每次提...
我在毕业设计中遇到一个问题,就是每次想提取出图像的轮廓长和宽的时候,提取出来的都是图片的长和宽。举个例子,我想提取数字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
希望大家不吝赐教。多谢 展开
不清楚是不是因为我前面把图像压缩的缘故,把代码放在下面,希望大家帮忙出出主意。
%%%%%%%%%%%%%%%%%预处理算法%%%%%%%%%%%%%%%%%%%%%%%
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个回答
展开全部
我帮你改了一下代码,你把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
[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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询