基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑.docx

上传人:b****3 文档编号:5533762 上传时间:2022-12-18 格式:DOCX 页数:36 大小:25.75KB
下载 相关 举报
基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑.docx_第1页
第1页 / 共36页
基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑.docx_第2页
第2页 / 共36页
基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑.docx_第3页
第3页 / 共36页
基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑.docx_第4页
第4页 / 共36页
基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑.docx

《基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑.docx》由会员分享,可在线阅读,更多相关《基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑.docx(36页珍藏版)》请在冰豆网上搜索。

基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑.docx

基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑

基于Harris原理的亚像素角点坐标检测Matlab程序word格式可编辑

基于Harris原理的亚像素角点坐标检测Matlab程序?

注意:

直接运行click_calib.m文件即可获得亚像素级角点坐标,附录?

中的

其它函数文件均会被click_calib.m文件调用。

click_calib.m%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%测量亚像素角点坐标的主函数

var2fix='dX_default';

fixvariable;%调用fixvariable.m文件,修正变量var2fix='dY_default';

fixvariable;

var2fix='map';

fixvariable;

if~exist('n_ima'),

data_calib;%调用data_calib.m文件,输入图像名和格

式,%检查文件中的图像并读取标定图像信

end;

check_active_images;%调用check_active_images.m文件,检查是%

否已读取到标定图像

if~exist(['I_'num2str(ind_active

(1))]),

ima_read_calib;

ifisempty(ind_read),

disp('Cannotextractcornerswithoutimages');

return;

end;

end;

fprintf(1,'\nExtractionofthegridcornersontheimages\n');

if(exist('map')~=1),map=gray(256);end;

ifexist('dX'),

dX_default=dX;

end;

ifexist('dY'),

dY_default=dY;

end;

ifexist('n_sq_x'),

n_sq_x_default=n_sq_x;end;

ifexist('n_sq_y'),

n_sq_y_default=n_sq_y;end;

if~exist('dX_default')|~exist('dY_default');

dX_default=30;

dY_default=30;%设靶标平面X和Y方向上方格的默认距

离%为30mm

end;

if~exist('n_sq_x_default')|~exist('n_sq_y_default'),

n_sq_x_default=10;

n_sq_y_default=10;%设在靶标平面的x和y方向上提取的角

点%数的默认值均为10

end;

if~exist('wintx_default')|~exist('winty_default'),

wintx_default=max(round(nx/128),round(ny/96));

winty_default=wintx_default;

clearwintxwinty

end;

if~exist('wintx')|~exist('winty'),

clear_windows;%调用clear_windows.m文件,清除窗口

end;

if~exist('dont_ask'),

dont_ask=0;

end;

if~dont_ask,

ima_numbers=input('Number(s)ofimage(s)toprocess([]=allimages)=');

else

ima_numbers=[];

end;

ifisempty(ima_numbers),

ima_proc=1:

n_ima;

else

ima_proc=ima_numbers;

end;

kk_first=ima_proc

(1);%输入('Startimagenumber([]=1=first):

');ifexist(['wintx_'num2str(kk_first)]),

eval(['wintxkk=wintx_'num2str(kk_first)';']);

ifisempty(wintxkk)|isnan(wintxkk),

disp('Windowsizeforcornerfinder(wintxandwinty):

');

wintx=input(['wintx([]='num2str(wintx_default)')=']);

ifisempty(wintx),wintx=wintx_default;end;

wintx=round(wintx);

winty=input(['winty([]='num2str(winty_default)')=']);

ifisempty(winty),winty=winty_default;end;

winty=round(winty);

fprintf(1,'Windowsize=%dx%d\n',2*wintx+1,2*winty+1);

end;

else

disp('Windowsizeforcornerfinder(wintxandwinty):

');

wintx=input(['wintx([]='num2str(wintx_default)')=']);

ifisempty(wintx),wintx=wintx_default;end;

wintx=round(wintx);

winty=input(['winty([]='num2str(winty_default)')=']);

ifisempty(winty),winty=winty_default;end;

winty=round(winty);

fprintf(1,'Windowsize=%dx%d\n',2*wintx+1,2*winty+1);

end;

if~dont_ask,

fprintf(1,'Doyouwanttousetheautomaticsquarecountingmechanism

(0=[]=default)\n');

manual_squares=input('ordoyoualwayswanttoenterthenumberofsquares

manually(1,other)?

');

ifisempty(manual_squares),

manual_squares=0;

else

manual_squares=~~manual_squares;

end;

else

manual_squares=0;

end;

forkk=ima_proc,

ifexist(['I_'num2str(kk)]),

click_ima_calib;%调用click_ima_calib.m文件,点击图像边%

界的4个顶点,从而划出边线

active_images(kk)=1;

else

eval(['dX_'num2str(kk)'=NaN;']);

eval(['dY_'num2str(kk)'=NaN;']);

eval(['wintx_'num2str(kk)'=NaN;']);

eval(['winty_'num2str(kk)'=NaN;']);

eval(['x_'num2str(kk)'=NaN*ones(2,1);']);

eval(['X_'num2str(kk)'=NaN*ones(3,1);']);

eval(['n_sq_x_'num2str(kk)'=NaN;']);

eval(['n_sq_y_'num2str(kk)'=NaN;']);

end;

end;

check_active_images;

forkk=1:

n_ima,

if~exist(['x_'num2str(kk)]),

eval(['dX_'num2str(kk)'=NaN;']);

eval(['dY_'num2str(kk)'=NaN;']);

eval(['x_'num2str(kk)'=NaN*ones(2,1);']);

eval(['X_'num2str(kk)'=NaN*ones(3,1);']);

eval(['n_sq_x_'num2str(kk)'=NaN;']);

eval(['n_sq_y_'num2str(kk)'=NaN;']);

end;

if~exist(['wintx_'num2str(kk)])|~exist(['winty_'num2str(kk)]),

eval(['wintx_'num2str(kk)'=NaN;']);

eval(['winty_'num2str(kk)'=NaN;']);

end;

end;

string_save='savecalib_dataactive_imagesind_activewintxwintyn_ima

type_numberingN_slotsfirst_numimage_numbersformat_imagecalib_nameHcal

WcalnxnymapdX_defaultdY_defaultdXdYwintx_defaultwinty_default';

forkk=1:

n_ima,

string_save=[string_save'X_'num2str(kk)'x_'num2str(kk)'n_sq_x_'

num2str(kk)'n_sq_y_'num2str(kk)'wintx_'num2str(kk)'winty_'num2str(kk)'

dX_'num2str(kk)'dY_'num2str(kk)];

end;

eval(string_save);

disp('done');

forlamp=1:

Nima_valid

dog1=['x_'num2str(lamp)];

name1=['x'num2str(lamp)'.txt'];

save(name1,dog1,'-ascii');

dog2=['X_'num2str(lamp)];

name2=['M'num2str(lamp)'.txt'];

save(name2,dog2,'-ascii');

end

return;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

fixvariable.m

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%修正变量

ifexist('var2fix')==1,

ifeval(['exist('''var2fix''')==1']),

ifeval(['isempty('var2fix')']),

eval(['clear'var2fix]);

else

ifeval(['~isstruct('var2fix')']),

ifeval(['~iscell('var2fix')']),

ifeval(['isnan('var2fix'

(1))']),

eval(['clear'var2fix]);

end;

end;

end;

end;

end;

end;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

data_calib.m

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%人工输入图像基名和格式,寻找、读取并显示出所有标定图像

l_ras=dir('*ras');

s_ras=size(l_ras,1);

l_bmp=dir('*bmp');

s_bmp=size(l_bmp,1);

l_tif=dir('*tif');

s_tif=size(l_tif,1);

l_pgm=dir('*pgm');

s_pgm=size(l_pgm,1);

l_ppm=dir('*ppm');

s_ppm=size(l_ppm,1);

l_jpg=dir('*jpg');

s_jpg=size(l_jpg,1);

s_tot=s_ras+s_bmp+s_tif+s_pgm+s_jpg+s_ppm;

ifs_tot<1,

fprintf(1,'Noimageinthisdirectoryineitherras,bmp,tif,pgm,ppmorjpgformat.

Changedirectoryandtryagain.\n');

break;

end;

dir;

Nima_valid=0;

while(Nima_valid==0),

fprintf(1,'\n');

calib_name=input('Basenamecameracalibrationimages(withoutnumbernor

suffix):

','s');%输入图像基名

format_image='0';

whileformat_image=='0',

format_image=input('Imageformat:

([]=''r''=''ras'',''b''=''bmp'',''t''=''tif'',

''p''=''pgm'',''j''=''jpg'',''m''=''ppm'')','s');%输入图像格式

ifisempty(format_image),

format_image='ras';

end;

iflower(format_image

(1))=='m',

format_image='ppm';

else

iflower(format_image

(1))=='b',

format_image='bmp';

else

iflower(format_image

(1))=='t',

format_image='tif';

else

iflower(format_image

(1))=='p',

format_image='pgm';

else

iflower(format_image

(1))=='j',

format_image='jpg';

else

iflower(format_image

(1))=='r',

format_image='ras';

else

disp('Invalidimageformat');

format_image='0';%Askforformatonceagain

end;

end;

end;

end;

end;

end;

end;

check_directory;%调用check_directory.m文件,按图像基

名%和格式检查文件中的图像

end;

if(Nima_valid~=0),

ima_read_calib;%调用ima_read_calib.m文件,读取图像

if~isempty(ind_read),

mosaic;%调用mosaic.m文件,显示所有的标定图像

end;

end;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

check_directory.m

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%检查文件中是否存在标定图像

l=dir([calib_name'*']);%返回含calib_name的所有文件信息的一个结构数组n*1Nl=size(l,1);%Nl为图像的幅数

Nima_valid=0;

ind_valid=[];

loc_extension=[];

length_name=size(calib_name,2);%calib_name的长度

ifNl>0,

forpp=1:

Nl,

filenamepp=l(pp).name;%第pp幅图像的名字

ifisempty(calib_name),

iii=1;

else

iii=findstr(filenamepp,calib_name);

end;

loc_ext=findstr(filenamepp,format_image);

string_num=filenamepp(length_name+1:

loc_ext-2);

ifisempty(str2num(string_num)),

iii=[];

end;

if~isempty(iii),%如果iii非空

if(iii

(1)~=1),%又如果iii

(1)!

=1,则将iii置空

iii=[];

end;

end;

if~isempty(iii)&~isempty(loc_ext),

Nima_valid=Nima_valid+1;

ind_valid=[ind_validpp];%第几个文件的下标是正确的

loc_extension=[loc_extensionloc_ext

(1)];

end;

end;

if(Nima_valid==0),

format_image=upper(format_image);

forpp=1:

Nl,

filenamepp=l(pp).name;

ifisempty(calib_name),

iii=1;

else

iii=findstr(filenamepp,calib_name);

end;

loc_ext=findstr(filenamepp,format_image);

string_num=filenamepp(length_name+1:

loc_ext-2);

ifisempty(str2num(string_num)),

iii=[];

end;

if~isempty(iii),

if(iii

(1)~=1),

iii=[];

end;

end;

if~isempty(iii)&~isempty(loc_ext),

Nima_valid=Nima_valid+1;

ind_valid=[ind_validpp];

loc_extension=[loc_extensionloc_ext

(1)];

end;

end;

if(Nima_valid==0),

fprintf(1,'Noimagefound.Fileformatmaybewrong.\n');

else

string_length=zeros(1,Nima_valid);

indices=zeros(1,Nima_valid);

forppp=1:

Nima_valid,

name=l(ind_valid(ppp)).name;

string_num=name(length_name+1:

loc_extension(ppp)-2);

string_length(ppp)=size(string_num,2);%数字的长度

indices(ppp)=str2num(string_num);%数字的大小--下标的顺序

end;

first_num=min(indices);

n_ima=max(indices)-first_num+1;

ifmin(string_length)==max(string_length),

N_slots=min(string_length);

type_numbering=1;

else

N_slots=1;

type_numbering=0;

end;

image_numbers=first_num:

n_ima-1+first_num;

active_images=ones(1,n_ima);

end;

else

string_length=zeros(1,Nima_valid);

indices=zeros(1,Nima_valid);

forppp=1:

Nima_valid,

name=l(ind_valid(ppp)).name;

string_num=name(length_name+1:

loc_extension(ppp)-2);

string_length(ppp)=size(string_num,2);

indices(ppp)=str2num(string_num);

end;

first_num=min(indices);

n_ima=max(indices)-first_num+1;

ifmin(string_length)==max(string_length),

N_slots=min(string_length);

type_numbering=1;

else

N_slots=1;

type_numbering=0;

end;

image_numbers=first_num:

n_ima-1+first_num;

active_images=ones(1,n_ima);

end;

else

fprintf(1,'Noimagefound.Basenamemayb

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1