图像增强(1-灰度级变换)—内涵MATLAB源码

蓝咒 提交于 2019-11-26 10:22:20

起篇三连问:

第一问:何为数字图像的增强?

       个人理解,就是通过对图像进行平滑去噪、改变灰度级或者增强边缘,将我们想要的某些图像特征更明显的显现出来。这就是图像的增强,该过程重在对比度的拉伸。

第二问:费了半天劲,对图像增强对我们有什么好处理嘞?

      说白了,图像增强就是一个图像预处理的工作,将我们想要的图像特征弄的比较显眼,为后期的目标提取、识别等打下良好的基础。

第三问:图像增强的方法有哪些?

      有小伙伴该说了这个难不倒俺,有调整灰度级的灰度级变换法(什么线性的、非线性的、分段的。。。)、去除噪声的(什么低通、中值、均值。。。)、显示边缘的(什么高通、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:m
    for j=1:n
        if I(i,j) < 50
            J(i,j) = 0;
        elseif I(i,j) > 150
            J(i,j) = 255;
        else
            J(i,j) = I(i,j) + 50;
        end
    end
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,有关灰度级变换的咱们到此结束了,接下来一节进行卷积操作。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!