如何在 Matlab 中傅立叶相位扰乱灰度 JPEG 图像?

How can I Fourier phase scramble a grayscale JPEG image in Matlab?

我需要在 Matlab 中对全部 JPEG 图像进行傅立叶相位扰乱。

使用以下脚本我可以对彩色图像进行相位扰乱,但是当我在灰度上尝试时它不起作用。我已经在Matlab中安装了图像处理。

任何关于如何修改代码以使其相位扰乱灰度的建议将不胜感激,因为我已经尝试将 ImSize 从 3 减少到 2,并将 (:,:,layer) 减少到 (:,layer) -但还是不开心!

提前致谢,

玛丽亚

Im = mat2gray(double(imread('c:\nick\matlab\randomphase\Bear.jpg')));
%read and rescale (0-1) image

ImSize = size(Im);

RandomPhase = angle(fft2(rand(ImSize(1), ImSize(2))));
%generate random phase structure

for layer = 1:ImSize(3)
    ImFourier(:,:,layer) = fft2(Im(:,:,layer));       
%Fast-Fourier transform
    Amp(:,:,layer) = abs(ImFourier(:,:,layer));       
%amplitude spectrum
    Phase(:,:,layer) = angle(ImFourier(:,:,layer));   
%phase spectrum
    Phase(:,:,layer) = Phase(:,:,layer) + RandomPhase;
%add random phase to original phase
    ImScrambled(:,:,layer) = ifft2(Amp(:,:,layer).*exp(sqrt(-1)*(Phase(:,:,layer))));   
%combine Amp and Phase then perform inverse Fourier
end

ImScrambled = real(ImScrambled); %get rid of imaginery part in image (due to rounding error)
imwrite(ImScrambled,'BearScrambled.jpg','jpg');

imshow(ImScrambled)

在您的代码中,您使用的是 ImSize = size(Im);ImSize(3),问题是灰度图像 ImSize 只有两个元素,因为它是一个二维矩阵。

而是使用 size(Im,3) 其中 returns 1,因为 matlab 总是假定额外的单例维度。出于同样的原因,您的进一步代码已经可以与灰度图像相媲美,因为 Im(:,:,layer)layer=1 returns 完整图像,这就是您在这种情况下想要的。