function output = shrinkHIO(data,maskparameter1,maskparameter2,loop1,loop2,loop3,loop4,beta) [M,N] = size(data) ; CCDrecord = data ; w_x=(-20:20); w_y=(-20:20); [X,Y]=meshgrid(w_x,w_y); sig=3; W=exp(-4*log(2)*(X.^2+Y.^2)./sig.^2); W = W/sum(sum(W)); autocor = fftshift(ifft2(ifftshift(CCDrecord .^2))) ; mask = abs(autocor) > maskparameter1*max(max(abs(autocor))) ; A = CCDrecord .* exp(1i*rand(M,N)) ; a = ifft2(ifftshift(A)) ; figure for j = 1:loop1 for i = 1:20 A = fftshift(fft2(a)) ; A(data~=-1) = CCDrecord(data~=-1) .* exp(1i*angle(A(data~=-1))) ; a1 = ifft2(ifftshift(A)) ; a = a1.*mask + a.*(mask==0) - beta * a1.*(mask==0) ; [j,i] end mask = conv2(abs(a),W,'same') ; %信号绝对值与w卷积,same表示卷积结果维度与输入信号a相同 mask = mask > maskparameter2*max(max(mask)) ; imagesc(abs(a)) ; title('recovered amplitude') ; V(j)=getframe; if sig >= 1.5 sig= sig* 0.99; else sig = 1.5 ; end W=exp(-4*log(2)*(X.^2+Y.^2)./sig.^2); W = W/sum(sum(W)); end中sig的作用
时间: 2024-01-05 18:04:06 浏览: 92
在HIO 函数中,sig 是一个标量变量,用于控制卷积核 W 的方差。在函数中,W 是一个高斯卷积核,其方差由 sig 决定,即 sig 越大,W 的方差越大,卷积核的主要能量集中在中心点附近,反之则能量分布更加平均。在函数中,sig 的值会随着迭代次数而不断变化,其值会从 3 开始逐渐降低,以保证卷积核 W 可以逐渐收缩。这样做的目的是在迭代过程中,使卷积核逐渐从全局搜索转向局部搜索,以增强算法收敛速度和稳定性。
阅读全文