数字图像处理-灰度变换(附MATLAB代码)

目录

图像增强

1.灰度变换

(1)线性变换

(2)分段线性变换

(3)非线性灰度变换

2.直方图修正法

(1)直方图均衡化

(2)直方图规定化

图像增强

图像增强的目的:(1)利用一系列技术改善图像的视觉效果,提高图像清晰度。(2)将图像转换为一种更适合人或机器进行分析处理的形式,抑制无用信息,提高图像使用价值。

图像增强从作用域划分为:空间域增强、频率域增强、彩色增强。

其中,空间域增强是直接对图像像素灰度进行操作。包括:点运算和局部运算。

频率域是经过傅里叶变换后对图像频谱进行操作,最后进行逆变换得到结果。

点运算包括:灰度变换、直方图修正法和局部统计法

1.灰度变换

灰度变换使得图像的动态范围增大,增强对比度,让图像变得更清晰,特征更明显。

其中包括:线性变换、分段线性变换、非线性灰度变换。

(1)线性变换

图像的灰度集中在较亮的区域而导致图像偏亮,这个时候可以对图像的每一个像素灰度作线性拉伸。

原图像f(i,j)的灰度范围为[a,b],线性变换后图像g(i,j)的范围为[a1,b1]

关系式为:g(i,j) = a1+\frac{b1-a1}{b-a}[f(i,j)-a]

A = imread('412.jpg');
A1 = rgb2gray(A);%彩色图像转为灰度图像
a1 = 0;
b1 = 255;%线性变换后的范围
%imhist(A1)%查看灰度直方图
subplot(121),imshow(A1);
a = 50;
b = 250;%原图像范围
A2 = a1+(b1-a1)/(b-a)*(A1-a);
subplot(122),imshow(A2);

数字图像处理-灰度变换(附MATLAB代码)_第1张图片

(2)分段线性变换

为了突出感兴趣的目标,抑制不感兴趣的目标,可以采用分段线性变换。

公式:

g(i,j) = \left\{\begin{matrix} (\frac{c}{a})f(i,j) & 0\leq f(i,j)\leq a\\ (d-c)/(b-a)[f(i,j)-a]+c & a\leq f(i,j)< b\\ [(M-d)/(M-b)][f(i,j)-b]+d & b \leq f(i,j)< M \end{matrix}\right.

A = imread('412.jpg');
A1 = im2double(rgb2gray(A));%彩色图像转为灰度图像
[h,w] = size(A1);
A2 = zeros(h,w);
a = 0.2;
b = 0.8;
c = 0.1;
d = 0.9;
for i = 1:h
    for j = 1:w
        if A1(i,j)<=a
            A2(i,j) = (c/a) * A1(i,j);
        elseif A1(i,j)

数字图像处理-灰度变换(附MATLAB代码)_第2张图片

(3)非线性灰度变换

某些非线性函数:对数函数、指数函数等作为映射函数的时候,可实现非线性变换。

1.对数变换

对低灰度区进行拉伸,对高灰度区进行压缩。

g(i,j) = a+\frac{ln[f(i,j)+1]}{b·lnc}

A = imread('412.jpg');
A1 = im2double(rgb2gray(A));%彩色图像转为灰度图像
subplot(221),imhist(A1)%查看灰度直方图
subplot(222),imshow(A1);
A2 = log(A1+1);
subplot(223),imhist(A2)
subplot(224),imshow(A2);

 

数字图像处理-灰度变换(附MATLAB代码)_第3张图片

2.指数变换

对高灰度区拉伸。

g(i,j) = b^{c[f(i,j)-a]}-1

A = imread('412.jpg');
A = rgb2gray(A);
A1 = double(A);
A2 = 1.5.^(A1*0.070)-1;
A1 = uint8(A1);
A2 = uint8(A2);
subplot(221),imhist(A1)%查看灰度直方图
subplot(222),imshow(A1);
subplot(223),imhist(A2)
subplot(224),imshow(A2);

数字图像处理-灰度变换(附MATLAB代码)_第4张图片

这里我发现了MATLAB里面 im2double 和 double原来是有区别的?于是去查了下……

(被这个坑了一个小时的我泪流满面)

im2double()是转换为double类型以后并且归一化为[0,1]中,而double没有做此处理。

2.直方图修正法

一般的图像灰度分布集中在较窄的区间,导致图像细节不清晰,使用直方图修正法可以让图像的灰度间距拉开或者让灰度分布均匀而增大反差,使得图像细节清晰。

直方图修正法包括:直方图均衡化和直方图规定化。

(1)直方图均衡化

直方图均衡化是将原图像的直方图通过变换函数修正为均匀的直方图,然后按均衡直方图修改原图像。

变换函数:(离散)

Sk = T(Rk) = \sum \frac{nj}{n}

ps.咦怎么打不出求和函数……

MATLAB里刚好有histeq()函数可以用于均衡化。

其中:histeq()有两个参数,第一个参数为要处理的图像,第二个参数为处理后的灰度级个数。

A = imread('412.jpg');
A1 = rgb2gray(A);
A2 = histeq(A1,64);
subplot(221),imhist(A1)%查看灰度直方图
subplot(222),imshow(A1);
subplot(223),imhist(A2)
subplot(224),imshow(A2);

数字图像处理-灰度变换(附MATLAB代码)_第5张图片

(2)直方图规定化

直方图规定化是使原图像灰度直方图变成规定形状的直方图来对图像作修正。

直方图均衡化是直方图规定化的一个特例。

A = imread('412.jpg');
A1 = rgb2gray(A);
h=0:255;
h=1-h/255;%目标直方图
A2 = histeq(A1,h);
subplot(221),imhist(A1)%查看灰度直方图
subplot(222),imshow(A1);
subplot(223),imhist(A2)
subplot(224),imshow(A2);

数字图像处理-灰度变换(附MATLAB代码)_第6张图片

  --------------------------end------------------------

下一篇总结图像空间域平滑

你可能感兴趣的:(图像处理)