资源简介
通过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
相关资源
- matlab相机标定
- 双目标定测试集
- 很详细的摄像机标定讲义-摄像机标定
- matlab相机标定程序 注解
- 可以方便地用来手动标记训练样本的
- 摄像头标定棋盘PDF
- 惯导六位置法标定解算Matlab程序
- MATLAB实现Harris角点检测与图像配准
- 机器人手眼标定Matlab程序高精度
- 基于MATLAB的目标定位
- matlab 相机标定工具箱
- 用matlab生成棋盘格
- 影响目标定位精度的分析
- harris角点提取以及影像配准
- 多个目标定位的基本算法仿真
- 机器人手眼标定-Matlab程序高精度
- 加速度计标定相关matlab代码
- 相机标定棋盘格图片可直接打印使用
- SIFT+RANSAC图像配准matlab代码,投影变换
- toolbox_calib
- 基于互信息的图像配准+棋盘格显示配
- 张正友摄像机标定法的matlab代码
- 张正友标定法Matlab的实现
- 已知两个坐标系下对应点坐标求转换
- Tsai标定方法matlab代码
- MATLAB标定工具箱
- 陀螺仪静态标定matlab程序
- 张正友相机标定matlab实现
- susancorners
- Max_CCM 用于图像配准
评论
共有 条评论