用Matlab实现碳纤维边缘的提取并输出坐标

一、 图像处理算法流程

图像处理算法流程

1. 读取图片:

image = imread(‘1.jpg’),在Matlab中,常用于读取图片的函数为imread()。
在这里插入图片描述

2. 转换为灰度图

读取的图片可能为彩色图片,也有可能是黑白的灰度图片。灰度图片可直接进行处理,彩色图片需要用rgb2gray()函数转换为灰度图片才能够继续处理。
在这里插入图片描述

3. 增强对比度(选择性使用)

使用直方图均衡化函数histeq()来增强图像的对比度,这个函数只有在图像整体偏暗或图像整体偏亮的条件下才使用,如果图像质量较好则不需要使用。
其中image_gray = histeq(image_gray,6)中参数6表示对比度增强的程度。

4. 二值化处理

实现二值化处理的函数为im2bw( ,thresh)。二值化处理需要设定一个阈值,图片中小于阈值(thresh)的设为像素值全部设为0,大于阈值(thresh)的像素值全部设为1。
阈值的选定可采用graythresh()函数来实自动选定阈,也可以根据自己对数据的观察和分析,手动设定阈值,thresh取值范围为0~1。
例:手动设置阈值:thresh = 0.5; image_im2bw = im2bw(image_gray,thresh);
在这里插入图片描述

5. 闭运算

根据图像的具体情况来使用开运算或闭运算,matlab自带开闭运算函数的处理效果有限,仅能进行微小细节部位的处理。
闭运算:
排除小型黑洞,突触了比原图轮廓区域更暗的区域,将两个区域连接起来,形成连通域。闭运算的函数为bwmorph( ,‘close’ , 5),5是执行次数,执行次数可以是inf(无穷大)。
开运算:
放大裂缝和低密度区域,消除小物体,在平滑较大物体的边界时,不改变其面积。消除物体表面的突起。开运算的函数为bwmorph( ,‘open’ , 4),4表示开运算执行了4次。

6. 滤波器

中值滤波器:
中值滤波原理:模板中心对准待处理像素,对模板下的对应像素进行灰度值排序,将中值赋给当前像素。medfilt2( ,[8,8])。[8,8]定义滤波器模板的大小为8×8。滤波器模板的大小需要自己设定。
在这里插入图片描述
均值滤波器:
在图像上对目标像素给一个模板,该模板包括了其周围的临近像素,再用模板中的全体像素的平均值来代替原来像素值。
midFiler=fspecial(‘average’,[8,8]);
image_imfilter=imfilter(image_bwmorph,midFiler,‘replicate’);
在这里插入图片描述

7. 提取边缘

对于二值图像来说matlab自带的边缘提取算子,效果差别不大。
在这里插入图片描述

边缘提取函数edge( ,‘prewitt’);其中’prewitt’是边缘提取算子,如下图所示。
在这里插入图片描述

二、 输出边缘坐标

由边缘提取函数获得的二值图像就是一维的线(边缘)。其中,有线(边缘)的地方为1(白色),无线的地方为0(黑色)。只需要用find函数找到元素1在矩阵中的位置就能确定边缘的坐标。[i,j]=find(image_edge==1);

利用find函数能找到所有的i,j。这里的i,j是行矩阵,包含了所有的坐标值,并按顺序排列。
但是矩阵的位置坐标是RC坐标系,还需要转换为XY坐标系。
[r,c]=size(image_edge); %获取矩阵的大小
[i,j]=find(image_edge==1);

y=r+1-i; %将rc坐标转换为xy坐标系
x=j;
xlswrite(‘文件名’, position ) % position坐标数据
在这里插入图片描述
在这里插入图片描述

三、源代码

clear;clc;close all

%读取图像
fprintf('%s','提示:若待处理图片在文件夹内直接输入图片名字(如:dog.jpg),若图片不在文件夹内则输入图片地址(如:D:\image\dog.jpg)');
fprintf('\n');%换行
name =input('提示:请输入待处理图片的名字:','s');
image = imread(name);%B1.png B.jpg
figure;imshow(image,[]);title('原图');

%将图片转换为灰度图
image_size=size(image);
dimension=numel(image_size);
if dimension==2
     fprintf('%s','提示:您读取了灰度图像!');
     image_gray =image;   
elseif dimension==3
     fprintf('%s','提示:读取了彩色图像!');
     image_gray =rgb2gray(image);%将彩色图像转换为灰度图
     %figure(8);imshow(image_gray,[]);title('灰度图');   
else
    fprintf('%d','提示:读取图片发生错误!');
end 

% 如果图像整体偏亮或者整体偏暗,再采用对比度增强。图像整体亮度均匀则不适用。
% image_gray = histeq(image_gray,6);
% figure(2);imshow(image_gray,[]);title('增强对比度');

thresh = graythresh(image_gray);     %自动确定二值化阈值
image_im2bw = im2bw(image_gray,thresh);       %对图像二值化
figure(3);imshow(image_im2bw );title('二值化图像');

image_bwmorph = bwmorph(image_im2bw,'close');  %闭运算
figure(4);imshow(image_bwmorph,[]);title('闭运算');

% 滤波器用一个够了

% 均值滤波
% midFiler=fspecial('average',[8,8]);
% image_imfilter=imfilter(image_bwmorph,midFiler,'replicate');
% figure(5);imshow(image_imfilter,[]);title('均值滤波');

% 中值滤波(选用中值滤波效果较好)
image_imfilter=medfilt2(image_bwmorph,[8,8]); 
figure(5);imshow(image_imfilter,[]);title('中值滤波');


%提取图象边缘
image_edge=edge(image_imfilter,'prewitt');
figure(6);imshow(image_edge);title('Prewitt Edge提取边缘');

%输出坐标
[r,c]=size(image_edge);%图片的大小
[i,j]=find(image_edge==1);%寻找边缘坐标

%将边缘坐标由rc坐标系转换为xy坐标系
y=r+1-i; 
x=j;  

%保存到坐标到excel文件中
position=[x';y']';
xlswrite('边缘坐标数据(第一行x,第二行y).xlsx',position)
fprintf('\n');%换行
fprintf('%s','提示:数据已存入Excel表格!');

%绘制散点图
figure(7);scatter(x,y,1) %scatter()的第三个参数相当于点的大小

  • 19
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值