数字图像处理之图像增强
- 1.时域图像增强
- 1.1. 灰度变换
- 1.2. 线性时域滤波
- 1.2.1 简单平滑
- 1.2.2 高斯平滑
- 1.3. 非线性时域滤波
- 1.3.1 中值滤波
- 1.3.2 统计排序滤波
- 2. 频域图像增强
- 2.1 图像的拉普拉斯锐化
图像增强是改善图像质量最常用的技术;其目的是为了改善图像的视觉效果,使图像更加清晰。
图像增强,按照作用域,可以分为时域处理和频域处理。时域处理直接对图像进行处理;而频域处理是在图像的某个变换域内,对图像的变换系数进行运算,然后通过逆变换获得图像增强的效果。
1.时域图像增强
时域图像增强技术主要有 灰度变换方法、直方图方法、滤波(线性和非线性)方法等。
1.1. 灰度变换
不改变原图像中像素的位置,只改变像素点的灰度值。灰度变换步骤:
首先,获取图像的直方图。得到灰度值集中的区间[min, max];
其次,将[min, max]之间的灰度值均匀分布在[0, 255]之间。
小于min的灰度值设为0,大于max的灰度值设为255;[min, max]之间的灰度值为x,[0, 255]之间的灰度值为y。满足如下:
clear all; close all;
I=imread('pout.tif');
I=double(I);
J=(I-80)*255/70;
row=size(I,1);
column=size(I,2);
for i=1:row
for j=1:column
if J(i, j)<0
J(i, j)=0;
end
if J(i, j)>255;
J(i, j)=255;
end
end
end
figure;
subplot(121);
imshow(uint8(I));
subplot(122);
imshow(uint8(J));
1.2. 线性时域滤波
1.2.1 简单平滑
通过邻域简单平均对图像进行平滑处理的方法。此方法可以在一定程度上消除原始图像中的噪声,但是以降低原始图像的对比度、清晰度为代价。
具体算法:对图像中的一定邻域内的像素灰度求平均值,将平均的结果作为中心像素的灰度保存在结果图中。
比如的简单平滑模板。
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('images/lena.jpg')
# 1.均值滤波
blur = cv2.blur(img, (3, 3))
plt.subplot(1,2,1)
plt.imshow(img)
plt.subplot(1,2,2)
plt.imshow(blur)
plt.show()
1.2.2 高斯平滑
也是利用邻域平均的思想对图像进行平滑的一种方法。与简单平滑不同的是,在高斯平滑中,对图像邻域进行平均时,不同位置的像素被赋予了不同的权值。
比如的高斯平滑模板。
- 效果
图像总体特征进行提取和增强,具有很好的效果。 - 权值的确定
高斯分布函数确定。就是正态分布。
1.3. 非线性时域滤波
非线性时域滤波包括中值滤波、统计排序滤波和自适应滤波等。
1.3.1 中值滤波
中值滤波是一种非线性的图像处理方法。通过对邻域内像素按灰度排序结果决定中心像素的灰度;即用像素邻域内的中间值代替该像素。
方法: 中值滤波即取某一窗口中各点值排序,并取其中位数之值为该点的值。一般窗口选:3 X 3, 5 X 5。窗口大小、形状可根据研究需要各式各样。
1.3.2 统计排序滤波
对采样窗口内的奇数个像素的灰度值进行排序,取出序列中位于中间位置的灰度作为中心像素的灰度。
如下几种常用的采样窗口:
对应上面采样窗口模板:
2. 频域图像增强
2.1 图像的拉普拉斯锐化
利用拉普拉斯算子对图像进行边缘增强的一种方法。拉普拉斯算子是以图像邻域内像素灰度差分计算为基础,通过二阶微分推导出的一种图像邻域增强方法。
拉普拉斯锐化的模板如下: