Matlab:获取图形边缘轮廓,并且将图形n等分

获取图形边缘轮廓

Matlab在图像处理方面有着不错的效果,用以下图片作为示范
3D图形截面

二值化图片,再使用Matlab的edge函数提取边缘

clear;clc;
file_path='E:\file\matlab\';%图像文件夹路径,此处修改
fprintf('正在读取的图像为:\n');

bw=0.3; % 自适应阈值

img_name=[file_path,'stone1.png'];%文件名,此处修改
pitch=imread(img_name);
pitch=rgb2gray(pitch);%灰度

pitch=histeq(pitch);%增强对比度
pitch=imadjust(pitch);
pitch=histeq(pitch);%增强对比度
pitch0=imadjust(pitch);
pitch=imbinarize(pitch0,bw);%二值化图片

w=fspecial('gaussian',[2,2],0.02);%滤波降噪
pitch=imfilter(pitch,w);%滤波降噪

pitch=edge(pitch,'sobel',0.01);%提取边缘
%提取轮廓坐标,可选择noholes只搜索物体
[Bound, L] = bwboundaries(pitch,8,'holes');
imshow(label2rgb(L, @jet, [.5 .5 .5]))
hold on

k=1; %对于此参考图,取第一块边界计算即可
x=Bound{k}(:,2);%提取x坐标
y=Bound{k}(:,1);%提取y坐标
plot(x, y, 'w', 'LineWidth', 2)
hold on

X=sum(x); %x的坐标和
x_average=X/length(x); %中心点x的坐标
Y=sum(y);%y的坐标和
y_average=Y/length(y); %中心点y的坐标
plot(x_average, y_average, 'g*')
hold on

获取图片效果
轮廓

将图形n等分

Matlab社区里面已经有大佬John D’Errico将图形n等分功能写成一个函数:interparc ,可以在matlab官网上登录后直接下载下来调用。
在Matlab社区File Exchange内有许多大佬贡献的优秀功能函数,这也是Matlab好用的特点之一。

pt = interparc(24,x,y,'spline'); % n等分轮廓,此处n取24
plot(pt(:,1),pt(:,2),'b-o')
hold on

获取图片效果:
在这里插入图片描述

完整代码

Matlab:获取图形边缘轮廓,将轮廓图形n等分,并求出n边凹多边形内角

参考博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值