散斑图的对比度及强度自相关计算代码
点击次数:
%本代码(matlab)是根据定义式计算CCD拍摄的一张散斑图的对比度和自相关函数分布(傅立叶变换)
clear all
% 读取图像并转为灰度
ob=imread('/Users/happylife/Desktop/1111.bmp');%读取图片
ob=ob(:,:,1);
img=im2double(ob);
%获取图像尺寸
[M, N] = size(img);
minvale=min(M,N)/2;
% 零填充到(2M-1)x(2N-1)以避免循环卷积效应
Iout=zeros(2*M-1,2*N-1);
Iout(1:M,1:N)=img(1:M,1:N);
% 计算FFT
F = fft2(Iout);
% 计算自相关的频域乘积(点乘共轭)
F_autocorr = F .* conj(F);
% 逆FFT得到自相关函数并取实部
autocorr = real(ifft2(F_autocorr));
% 将原点移到中心
autocorr_shifted = fftshift(autocorr);
% 归一化到[0, 1]以便于可视化
autocorr_normalized = autocorr_shifted / max(autocorr_shifted(:));
autocorr_normalized=autocorr_normalized(M-minvale:M+minvale,N-minvale:N+minvale);
% 显示结果
figure;
imagesc(autocorr_normalized);
axis equal
title('归一化的自相关函数');
colorbar;