这阵子在研究拐点检测,于是用matlab实现了尚振宏等的《二值图像中拐点的实时检测算法》。
代码说明:
1、测试图片只存在一个轮廓,若存在多个轮廓,最终结果以取得的第一个轮廓处理;
示例:
2、本人只实现了论文中的前四步,第五步的过滤伪拐点和第六步判断拐点的凹凸性没实现;
3、若有错误,欢迎指正。
代码1(8邻域拐点检测)
<span style="font-family:Microsoft YaHei;">clc;clear;close all;
%% 测试图像预处理
im0=imread('2.jpg');
im=im2bw(im0);%二值化
figure(1);imshow(im);title('原图')
[M,N]=size(im);
%% 求轮廓
B=bwboundaries(im);%寻找轮廓,B为存储轮廓信息的结构体
im1=zeros(M,N);
for k=1:length(B)
boundary=B{k};%第k个轮廓,两列,存储轮廓各像素坐标
%标注第k个轮廓像素所在位置为1
for l=1:length(boundary)
im1(boundary(l,1),boundary(l,2))=1;
end
end
figure(2);imshow(im1);title('轮廓图')%绘制轮廓图
%% 求链码
[nr,nc]=size(B{1});
Code=size(1,nr);
for i=1:nr
if i==1 %起点到终点的链码特殊处理
x=B{1}(i,1)-B{1}(nr,1); %x&#