image之如何在 Matlab 中傅立叶相位扰乱灰度 JPEG 图像
zengkefu
阅读:88
2024-10-01 17:34:08
评论:0
我需要在 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只有两个元素,因为它是一个二维矩阵。
而是使用返回 1 的 size(Im,3),因为 matlab 总是假设有额外的单一维度。出于同样的原因,您的进一步代码已经可以与灰度图像相媲美,因为 Im(:,:,layer) 和 layer=1 返回完整图像,这就是在这种情况下你想要。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



