有一个matlab的函数文件,但是不知道每一步的意思,函数文件内容如下:function [corr] = corrfft(f,g)%计算相关系数,其中f和g为两幅图像,本函数的作用是计算f和g的相关系数sze = size(f);sze = sze(1);f = fli
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/15 11:31:06
有一个matlab的函数文件,但是不知道每一步的意思,函数文件内容如下:function [corr] = corrfft(f,g)%计算相关系数,其中f和g为两幅图像,本函数的作用是计算f和g的相关系数sze = size(f);sze = sze(1);f = fli
有一个matlab的函数文件,但是不知道每一步的意思,
函数文件内容如下:
function [corr] = corrfft(f,g)
%计算相关系数,其中f和g为两幅图像,本函数的作用是计算f和g的相关系数
sze = size(f);
sze = sze(1);
f = flipud(fliplr(f));
ffft = fft2(f,sze*2,sze*2);
gfft = fft2(g,sze*2,sze*2);
yout = ifft2(ffft.*gfft);%逆变换
startpt = sze/2 + 1;
endpt = sze*2 - sze/2;
h = yout(startpt,:);
for i = (startpt+1):endpt
h = [h; yout(i,:)];
end
yout = h(:,startpt);
for i = (startpt+1):endpt
yout = [yout h(:,i)];
end
y = yout;
corr = max(max(y));
这个函数是计算两幅图像相关系数的,但是具体怎么实现的我看不懂,谁能帮忙注释一下每句的意思,感激不尽啊
有一个matlab的函数文件,但是不知道每一步的意思,函数文件内容如下:function [corr] = corrfft(f,g)%计算相关系数,其中f和g为两幅图像,本函数的作用是计算f和g的相关系数sze = size(f);sze = sze(1);f = fli
function [corr] = corrfft(f, g)
%计算相关系数,其中f和g为两幅图像,本函数的作用是计算f和g的相关系数
sze = size(f);%%得到图像f的尺寸,sze共2个元素,一个是行数,一个是列数
sze = sze(1);%%sze为图像f的行数
f = flipud(fliplr(f));%%相当于对图像进行逆时针180°旋转
ffft = fft2(f, sze*2, sze*2);
gfft = fft2(g, sze*2, sze*2);%%对图像进行二维傅里叶变换,(sze*2)*(sze*2)控制图像大小,如果图像f和g的大小小于(sze*2)*(sze*2)的话就给其补0,让其尺寸增大为(sze*2)*(sze*2),最终返回结果的尺寸也是(sze*2)*(sze*2)
根据计算相关系数的公式,可以看出是进行二维卷积,所以转换到频率域就是直接相乘
yout = ifft2(ffft.*gfft);%逆变换,yout就是图像ffft和图像gfft的相关系数函数,由于返回图像的尺寸是(sze*2)*(sze*2)
假设sze=256
startpt = sze/2 + 1;%%应该从129开始,即sze/2 + 1
endpt = sze*2 - sze/2+1;%%到384
h = yout(startpt,:);%%令h=yout中的129行
for i = (startpt+1):endpt
h = [h; yout(i,:)];%%把其余的130-384行全部赋给h
end%%上面主要是处理行,下面就是处理列
yout = h(:,startpt);%%把h的第129列赋给yout
for i = (startpt+1):endpt
yout = [yout h(:,i)];%%其余的130-384列赋给youty最终就是
end
y = yout;%%最终的y就是256*256大小
corr = max(max(y));%%找到相关系数函数矩阵中的最大值