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.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号