起篇三连问:
第一问:何为数字图像的增强?
个人理解,就是通过对图像进行平滑去噪、改变灰度级或者增强边缘,将我们想要的某些图像特征更明显的显现出来。这就是图像的增强,该过程重在对比度的拉伸。
第二问:费了半天劲,对图像增强对我们有什么好处理嘞?
说白了,图像增强就是一个图像预处理的工作,将我们想要的图像特征弄的比较显眼,为后期的目标提取、识别等打下良好的基础。
第三问:图像增强的方法有哪些?
有小伙伴该说了这个难不倒俺,有调整灰度级的灰度级变换法(什么线性的、非线性的、分段的。。。)、去除噪声的(什么低通、中值、均值。。。)、显示边缘的(什么高通、sobel算子、roberts算子。。。)。看到这样的回答我只能说:老铁没毛病。但我想说的是任你天花乱坠,我只认时域和频域。。。。嘿嘿。
OK,废话不多说了,看正文。。。。
咱们来看看在时域(也有人说是空域)
在时域中一般有两个方式:灰度级变换和卷积操作。接下来咱逐个来看哈。本节重点实现灰度级变换
灰度级变换,说明白点就是改变图像中部分像素点的灰度值,目的就是将灰度级扩展一下,将图像更亮暗分明些,仅此而已(在图像增强中属于最简单的一类)。大致方法就是线性变化和非线性变化两大类。线性变化中主要包含有:正比、反比和分段函数;非线性主要包含有:幂函数、对数函数等。原理比较简单,直接在代码中体现。
实例来咯:以MATLAB自带图像pout.tif作为原始图像
%线性变化
close all; clear all; clc
I = imread('pout.tif');
figure;imshow(I);title('原图')
%线性变化,整体变亮.函数 y = 2x + 33
g1 = 2.*I + 3;
figure;
subplot(221);imshow(I);title('原图');
subplot(222);imhist(I);title('原图的灰度直方图')
subplot(223);imshow(g1,[]);title('线性变换后的变亮图像')
subplot(224);imhist(g1);title('线性变换后变亮图像的灰度直方图')%线性变化,整体变暗,函数 y = x-50
g2 = I - 50;
figure;
subplot(221);imshow(I);title('原图');
subplot(222);imhist(I);title('原图的灰度直方图')
subplot(223);imshow(g2,[]);title('线性变换后的变暗图像')
subplot(224);imhist(g2);title('线性变换后变暗图像的灰度直方图')%分段函数 0 x<50
% y = 2*x + 3 50<x<=150
% 255 x>150
[m,n] = size(I);
J = ones(m,n);
for i=1:mfor j=1:nif I(i,j) < 50J(i,j) = 0;elseif I(i,j) > 150J(i,j) = 255;elseJ(i,j) = I(i,j) + 50;endend
end
J = uint8(J);
figure;
subplot(221);imshow(I);title('原图');
subplot(222);imhist(I);title('原图的灰度直方图')
subplot(223);imshow(J);title('分段函数变换后的图像')
subplot(224);imhist(J);title('分段变换后图像的灰度直方图')
处理结果:
从上图的处理结果,大家可以看出,灰度级的变换就是改变图像中每个像素的灰度值。尤其第二幅和第三幅图的直方图可以很明显的看出,第二幅图由于整体灰度值都降低了50,则整个直方图向左移了50。第三图将低于50和高于150的都归于0和255了,只留下中的一部分,并在该部分加了50,故直方图看起来单薄了些,但大致形状还是有的,并且向右移了50。
Ok,这部分就是线性的部分的灰度级变换了,接下来进行非线性的。
log型、曲线型、指数型。
close all; clear all; clc
I = imread('pout.tif');
%指数型 y = 30*(log(x+1))
J = im2double(I);%由于I属于uint型,在进行log或指数运行时,须变换成double型
K = 30*(log(J+1));
K = uint8(K);
subplot(221);imshow(I);title('原图');
subplot(222);imhist(I);title('原图的灰度直方图')
subplot(223);imshow(K,[]);title('log变换后的图像')
subplot(224);imhist(K);title('log变换后图像的灰度直方图')%曲线形 y = x+ x*(255-x)/255
K1 = I + I.*(255-I)./255;
figure;
subplot(221);imshow(I);title('原图');
subplot(222);imhist(I);title('原图的灰度直方图')
subplot(223);imshow(K1,[]);title('曲线型变换后的图像')
subplot(224);imhist(K1);title('曲线型变换后图像的灰度直方图')%指数型 y = e^(-0.5*x + 3)
K2 = exp(-0.5.*J + 3);
K2 = uint8(K2);
figure;
subplot(221);imshow(I);title('原图');
subplot(222);imhist(I);title('原图的灰度直方图')
subplot(223);imshow(K2,[]);title('曲线型变换后的图像')
subplot(224);imhist(K2);title('曲线型变换后图像的灰度直方图')
处理结果:
OK,有关灰度级变换的咱们到此结束了,接下来一节进行卷积操作。