您的位置:首页 > 编程语言 > MATLAB

Matlab 图像处理 冈萨雷斯 第四章 频域处理 4.1 && 4.2

2014-06-22 23:36 267 查看
重点关注如在Matlab 中实现频域滤波。
内容:
1.在图像增强中的频域滤波,包括低通,基本的高通和高频强调滤波。
2.简要说明结合空间域和频域进行图像处理的优点。

4.1二维离散傅里叶变换

一些概念:

4.2 计算并可视化二维 DFT
快速傅里叶变化 fft2    
             
           
           
  F = fft2(f)

用零填充使图像大小为 P * Q
             
           
           
  F= fft2(f, P,  Q)

傅里叶频谱可用函数abs 获得:
             
           
           
  S = abs(F)

ex: 计算傅里叶变化并显示频谱:


>> a = zeros(100);
>> for i=45:1:55
for j= 45:1:55

a(i,j)=255;

end

end
>> imshow(a);
>> F = fft2(a);
>> S = abs(F);
>> imshow(S);
>> imshow(S, [ ]);

           
                 原图         
           
           
           
          得到的S,即傅里叶频谱

图像的四个角上的亮点是是周期性导致的结果???

可以用IPT 的 fftshift 函数 将变换的原点移动到频率矩形中心。
语法:
             
          Fc = fftshift(F)



>> Fc = fftshift(F);
>> figure, imshow(abs(Fc),[ ]); 

该函数通过交换F的象限来操作。
ex. 若  a = [1 2 ; 3 4]. fftshift = [4 3; 2 1]

该频谱中 值的动态范围( 0~204 000) 与 8比特 显示相比要大得多。
利用对数变化处理该问题(该书3. 2.2 节);


>> S2 = log(1+ abs(Fc));
>> figure, imshow(S2, [ ]);

现在转到3.2.2 对数和对比度拉伸变换:
    对数表达式实现:

             
      g = c*log(1 + double(f) )

    重要应用,压缩动态范围,

    通过对数运算,10^6左右的动态范围会降至 14。方便我们处理。

对8 bit  而言,最简方法是使用语句
             
   gs = im2uint8(mat2gray(I));



>> I = imread('brd_a.tif');
>> imshow (I);
>> gs = im2uint8(mat2gray(I));
>> imshow(gs);

        

相反的,函数  ifftshift 用于颠倒这种居中:
            F = ifftshift(
Fc )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息