数字图像处理-灰度变换(附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);

(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)<b
            A2(i,j) = (d-c)/(b-a)*(A1(i,j) - a) + c;
        else 
            A2(i,j) = (1-d)/(1-b)*(A1(i,j) - b) + d;
        end
    end
end
subplot(121),imshow(A1),title('原图');
subplot(122),imshow(A2),title('分段灰度变换');

(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);

 

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里面 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);

(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);

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

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

  • 59
    点赞
  • 355
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值