用MATLAB批量求多幅图片轮廓与图片边缘的坐标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用MATLAB批量求多幅图片轮廓与图片边缘的坐标相关的知识,希望对你有一定的参考价值。

我已经可以求单幅照片中轮廓与图片边缘的坐标,如下
Close all;clear all;clc;
I=imread('D:\重要文件\A中期-图像处理\404.7\7二值图像\1.bmp');%读取二值图像
J1=imfill(I,'holes');%填充
J2=bwperim(J1);%轮廓提取
rect=[0 0 191 119];
J3=imcrop(J2,rect);
imshow(J3)
[x,y]=find(J3==1)
xsort = sort(x,'descend');
ind1=find(x==xsort(1));
point1=[x(ind1),y(ind1)]; %第一个边缘点
xlswrite('D:\重要文件\A中期-图像处理\试.xls',point1)

但是我求多幅(例:3幅)时,程序只有一个结果,默认3幅照片中其中一个坐标,其他坐标不显示,如下
Close all; clear all; clc;
dir='D:\重要文件\A中期-图像处理\404.7\7二值图像\';
for i=1:3
fn=strcat(dir,int2str(i));
f=imread(strcat(fn,'.bmp'));
J1=imfill(f,'holes');%填充
J2=bwperim(J1);%轮廓提取
rect=[0 0 191 119];
J3=imcrop(J2,rect);
[x,y]=find(J3==1)
xsort = sort(x,'descend');
ind1=find(x==xsort(1));
point1=[x(ind1),y(ind1)]; %第一个边缘点
xlswrite('D:\重要文件\A中期-图像处理\404.7\404.7焦点坐标.xls',point1,'sheet1',['A',num2str(i)])
end

求大神指点迷津

Close all; clear all; clc;
dir='D:\\重要文件\\A中期-图像处理\\404.7\\7二值图像\\';
point1 = [];
for i=1:3
  fn=strcat(dir,int2str(i));
  f=imread(strcat(fn,'.bmp'));
J1=imfill(f,'holes');%填充
J2=bwperim(J1);%轮廓提取
rect=[0 0 191 119];
J3=imcrop(J2,rect);
[x,y]=find(J3==1)
xsort = sort(x,'descend');
ind1=find(x==xsort(1));
point1=[point1;x(ind1),y(ind1)]; %建议先看看3幅图像各自的边缘点是否都识别出来了,确认后可以把point1整体保存到xls中
%xlswrite('D:\\重要文件\\A中期-图像处理\\404.7\\404.7焦点坐标.xls',point1,'she%et1',['A',num2str(i)])
end

参考技术A 对图片边缘点的提取 F=imread('butterfly.jpg'); F1=~im2bw(F);
F2=bwfill(F1,'holes'); SE=ones(3)
F3=imdilate(F2,SE); F4=bwperim(F2); figure,imshow(F4);
imwrite(F4,' butterfly2.jpg '); 对边缘点的坐标化 a=imread('picture.bmp'); b=rgb2gray(a);
c=edge(b);
imshow(double(c)); c
[x,y]=find(c)
plot(y,x,'k.')
参考技术B 楼主是什么版本的matlab
Close大写也可以?

matlab 提取图像轮廓(图像边缘提取)

利用edge()函数提取图像轮廓,绘制出对象的边界和提取边界坐标信息,matlab实现代码如下:

close all;clear all;clc;
% 提取图像轮廓,提取图像边缘
I = imread(‘yifu.jpg‘);
c = im2bw(I,graythresh(I));
figure;
subplot(131);imshow(I);
c = flipud(c);   %实现矩阵c上下翻转
b = edge(c,‘canny‘);
[u,v] = find(b);   %返回边界矩阵b中非零元素的位置
xp = v;  %行值v赋给xp
yp = u;  %列值u赋给yp
x0 = mean([min(xp),max(xp)]);  %x0为行值的均值
y0 = mean([min(yp),max(yp)]);  %y0为列值得均值
xp1 = xp-x0;
yp1 = yp-y0;
[cita,r] = cart2pol(xp1,yp1);
q = sortrows([cita,r]);  %从r列开始比较数值并按升序排序
cita = q(:,1);  %赋角度值
r = q(:,2);  %赋半径模值
subplot(132);polar(cita,r);  %画极坐标下的轮廓图
[x,y] = pol2cart(cita,r);
x = x+x0;
y = y+y0;
subplot(133);plot(x,y);axis equal;
技术图片

程序运行结果:

技术图片?

技术图片
 

以上是关于用MATLAB批量求多幅图片轮廓与图片边缘的坐标的主要内容,如果未能解决你的问题,请参考以下文章

如何用matlab实现数字手势的识别

在matlab中,怎么把图片中的图像轮廓坐标找出来?

MATLAB用作图之后如何把y轴的坐标值放到两个刻度之间?

求高手给一个matlab提取图像lbp的代码 谢谢啦

opencv-python基础用法详细代码-图片加载-ROI-边缘滤波-二值化-轮廓提取-膨胀腐蚀等

TIF图片怎么查看坐标?最好详细一点