资源简介
通过canny算子提取棋盘格图像边缘,然后使用Hough算法提取边缘图中直线,利用直线交点对全图角点检测结果进行过滤,最终达到自动可靠准确地提取出所有图像中棋盘格的角点坐标,可用于相机或投影仪的标定。
代码片段和文件信息
clc
clear
close all
%结果数据是CC
% rootFolder = fullfile(‘D:\Data\2016.5.18棋盘格‘);
rootFolder = fullfile(‘D:\程序\总‘);
imgSets = imageSet(rootFolder);
count=imgSets.Count(11);
row=7;%棋盘格的行数
col=10;%棋盘格的列数
rho=12;%ρ为图像中角点弥散斑直径。
bianchang=160;%棋盘格的边长
theta=0.2;%角度步进
jd=cell(1count);
for img=1:count
I=read(imgSetsimg);%读取第i幅图
I=rgb2gray(I);
%做标准差为3的高斯滤波,然后以0.08为低门槛,0.2为高门槛,进行canny边缘检测
%考虑到棋盘格信息对比度明显,选择较高的灰度梯度门槛值进行边缘检测
%可以考虑使用OTSU算法对棋盘格图像进行预处理
[BWthresh]=edge(I‘canny‘[0.2*0.40.2]3);%BW为二值化的边缘图像
% figure;imshow(I[]);
% figure;imshow(BW[]);
%%
%hough变换检测竖线
[HTR]=hough(BW‘RhoResolution‘rho‘Theta‘-10:theta:10);
P=houghpeaks(Hcol+3‘threshold‘ceil(0.2*max(H(:))));%预留4个裕量
lines=houghlines(BWTRP‘FillGap‘bianchang*1.5‘MinLength‘bianchang*3);
% h2=figure;
% imshow(I‘InitialMagnification‘30);
% title(‘霍夫变换直线检测‘);
% grid on;
% axis on;
% hold on;
shu=[];
ps=[];
for k=1:length(lines)
xy=[lines(k).point1;lines(k).point2];
dis=(xy(11)+xy(21))/2;
shu=[shudis];
sign=0;
if length(shu)>1
for i=1:length(shu)-1
if abs(dis-shu(i)) shu(end)=[];%删除重复直线
sign=1;
break
end
end
end
if sign
continue
end
t=lines(k).theta;
r=lines(k).rho;
%写成x=p1*y+p2的形式避免斜率为无穷
p=[-tan(t*pi/180)r/cos(t*pi/180)];
ps=[ps;p];
% y=1:max(size(I));
% x=polyval(py);
% plot(xy‘LineWidth‘2‘Color‘‘green‘);
end
%删除可能存在的棋盘格边缘线
%限制条件:棋盘格必须位于图像正中,偏差不能超过一个棋盘格
%这里是偷懒了、、凑合用
switch length(shu)
case col+1
for u=1:2
[m1index1]=max(shu);
m1=size(I2)-m1;
[m2index2]=min(shu);
if m1 ps(index1:)=[];
shu(index1)=[];
else
ps(index2:)=[];
shu(index2)=[];
end
end
case col
[m1index1]=max(shu);
m1=size(I2)-m1;
[m2index2]=min(shu);
if m1 ps(index1:)=[];
shu(index1)=[];
else
ps(index2:)=[];
shu(index2)=[];
end
end
if length(shu) disp(strcat(‘第‘num2str(img)‘张棋盘格竖线漏检‘));
end
%%
%hough变换检测横线
[HTR]=hough(BW‘RhoResolution‘rho‘Theta‘[-90:theta:-8080:theta:90-theta]);
P=houghpeaks(Hrow+3‘threshold‘ceil(0.2*max(H(:))));
lines=houghlines(BWTRP‘FillGap‘bianchang*1.5‘MinLength‘bianchang*3);
heng=[];
ph=[];
for k=1:length
- 上一篇:光栅条纹投影生成gui
- 下一篇:DNAencode.m
相关资源
- 基于harris算法的角点检测matlab原代码
- matlab实现摄像机标定
- 坐标转换/坐标标定(matlab优化方法实
- Harris角点检测matlab实现
- 基于角点检测的图像匹配
- harris角点检测并精确到亚像素级
- 张正友标定程序—MATLAB
- Matlab棋盘格角点检测算法
- 基于MATLAB相机标定 有源程序,试验图
- 亚像素棋盘格角点获取
- 张正友标定论文
- 相机标定Matlab程序
- MATLAB实现多图融合
- fast角点检测算法for matlab
- 基于matlab 相机标定程序
- 基于MATLAB的Harris角点检测并精确到亚
- Matlab+OpenCV相机标定详细步骤
- FAST角点检测算法MATLAB程序
- 导航卫星坐标定位和伪距测量结算及
- 经典手眼标定算法matlab代码
- 基于Bouguet角点提取法的摄像机标定方
- 基于MATLAB的手机相机校正与标定实验
- 亚像素harris角点检测
- 张正友相机标定Opencv实现带棋盘格打
- 惯导温度补偿标定matlab与采样数据
- Tsai两步法标定代码
- Tsai两步法摄像机标定的Matlab实现
- harris角点检测代码
- 基于角点匹配的susan角点检测算法
- FAST检测角点+SIFT特征描述符描述角点
评论
共有 条评论