从上节的回顾中,我们知道了图像增强可以分为点增强、空间域增强,频域增强;
空间域增强是直接在图片上增强,有各种现成的算子可供使用;但对于频域增强来讲,他是需要将图片先转换为频域才能进行转换,频域一般是进行滤波,如低通滤波,高通滤波等,今天就来讲一下频域增强所用的滤波方式;
第一大部分:低通滤波器(保留低频,过滤高频)
第一,理想低通滤波器,低通滤波器的作用就是保存低频,过滤高频;内容就是设置一个定值来作为范围,超过这个数的部分为0,低于这个数的部位为1,举例:
%低通滤波器
clc
clear all
I = imread('dream.jpg');
I = rgb2gray(I);
I = im2double(I);
m = 2*size(I, 1);%不乘2的话,D的范围减半以至于后面的部分都要减半,使得L无法成型
n = 2*size(I, 2);
x = -m/2 : (m/2-1);%获得在x方向的所有长度
y = -n/2 : (n/2-1);%获得在y方向上所有的长度
[X, Y] = meshgrid(x, y);%建立网格,方便进行计算到零点的距离,若步建立网格,会导致数组大小不兼容,建网格实际上是让他们的模板大小一样
D = sqrt(X.^2 + Y.^2); %构造D矩阵,D是各位置与原点的距离
D0 = 80; %D0为截止频率(中心频率)
H = double(D <= D0);%小于等于D0的位置为1,不满足的为0
J = fftshift(fft2(I, size(H, 1), size(H, 2))); %转换为频域再用fftshift进行平移,转换为与H相等大小的图像数据
K = J.*H; %频域内滤波
L = ifft2(ifftshift(K)); %逆变换回到空域
L = L(1: size(I, 1), 1: size(I, 2));%因为L一开始是694*1040大小的,然后需要将其中转换为与原图片一样大的,若前面的M与N里面不乘以2的话,L的范围会比I小,同时显示出来的范围是不完整的
figure
subplot(121), imshow(I);
subplot(122), imshow(L);
因为我也是刚学,所以该程序是我从Matlab之图像增强技术(九)_我要糖的博客-优快云博客_matlab图像增强
里面借鉴的,并且做了一些自己的理解;低频滤波器过滤掉高频使得图片边缘变模糊;
还有一种写法:
clc
clear all
I = imread('dream.jpg');
I = rgb2gray(I);