www.pudn.com > cylindpano1.rar > poc_2pow.m
function [dis,dm]=poc_2pow(imageL,imageR);
%%%%%%%%%%%%%%%%%相位相关算法
% imageL=image1;
% imageR=image2;
[H1,W1,d1]=size(imageL);
[H2,W2,d2]=size(imageR);
if d1==3 imageL=rgb2gray(imageL);end%%%灰度图
if d2==3 imageR=rgb2gray(imageR);end
%%%%%%%%%%%%%提取2幂方图的二值化的轮廓
[imageL,t1]=edge(imageL,'canny',[],1.2);%%%%sigma=1.2(默认1)
[imageR,t2]=edge(imageR,'canny',[],1.2);%%%%阈值自动选择
Xb=imageL;Yb=imageR;
%%%%%%%%%%%%%%2幂方图
for i=5:11
index2=2^i;
if index2<=H1 && index2<=W1 h1=index2;end
if index2<=H2 && index2<=W2 h2=index2;end
end
% minhw1=min(h1,w1);
% minhw2=min(h2,w2);
minhw1=h1;minhw2=h2;
offset1=round((H1-minhw1)/2);
offset2=round((H2-minhw2)/2);
imageL=imageL(offset1:offset1+minhw1-1,W1-minhw1+1:W1);%%%左图取右中
imageR=imageR(offset2:offset2+minhw2-1,1:minhw2);%%%%右图取左中
%%%%%%%%%%%%相位相关算法求偏移量
A=fft2(im2double(imageL));%傅立叶变换,频域
B=fft2(im2double(imageR));
AB=conj(A).*(B);%%%共轭卷积,相当于改变相位
modAB=abs(AB);
%%%%%%%%%%%%求峰值,(I,J)保存峰值坐标,即为平移量
COR=ifft2(AB);%%%不归一化,反变换得相关
emin=100000;
% for i=1:10
[maxC,sorti]=max(COR);
[C,J]=max(maxC);
I=sorti(J);
if I<20 dis=I;
elseif H2-I<20 dis=(I-H2);
else dis=0;
end
dm=J;
% top10(i,1)=dis;
% top10(i,2)=dm;
% top10(i,3)=C;
% COR(I,J)=0;
% try
% newc=minhw1-dm+1;
% block1=imageL(121:136,newc-8:newc+7);
% block2=imageR(121:136,dm-8:dm+7);
% e=abs((block1-block2));
% e2=sum(sum(e.^2))/256;
% % if e2