灰度变换增强


灰度变换增强是将图像的对比度从弱变强的过程,所以也通常称为对比度增强。各种因素的限制,导致图像的对比度比较差,图像的直方图分布不够均衡,主要的元素集中在几个像素值附近。通过对比度增强,使得图像中各个像素值尽可能均匀分布或者服从一定形式的分布,从而提高图像的质量。
灰度变换可使图像动态范围增大,对比度得到拓展,使图像清晰、特征明显,是图像增强的重要手段之一。它主要利用点运算来修正像素灰度,由输入像素点的灰度值确定相应输出点的灰度值,是一种基于图像变换的操作。
灰度变换不改变图像内的空间关系,除了灰度级的改变是根据某种特定的灰度函数进行之外,可以看做是‘从像素到像素’的复制操作。

1.线性变换与非线性变换

设原图像为f(x,y),其灰度范围为[a,b],变换后的图像为g(x,y),其灰度范围线性扩展至[c,d],则对于图像中的任一点的灰度值f(x,y),灰度变换后为g(x,y),其数学表达式为
在这里插入图片描述
若图像中大部分像素的灰度级分布在区间[a,b]内,maxf为原图的最大灰度级,只有很小一部分的灰度级超过了此区间,则为了改善增强效果,可以令
在这里插入图片描述
采用线性变换对图像中每一个像素灰度作线性拉伸,将有效改善图像视觉效果。在曝光不足或曝光过度情况下,图像的灰度可能会局限在一个很小的范围内,这时得到的图像可能是一个模糊不清、似乎没有灰度层次的图像。
非线性变换就是利用非线性变换函数对图像进行灰度变换,主要有指数变换、对数变换等。指数变换是指输出图像的像素点灰度值与对应的输入图像的像素灰度值之间为指数关系,其一般公式为
在这里插入图片描述
其中,b为底数。为了增加变换的动态范围,在上述一般公式中可以加入一些调制参数,以改变变换曲线的初始位置和变化速率。这时的变换公式为
在这里插入图片描述
式中,a,b,c都是可以选择的参数,当f(x,y)=a时,g(x,y)=0,此时指数曲线教育X轴,由此可见参数a决定指数变换曲线的初始位置,参数c决定变换曲线的陡度,即决定曲线的变化速率。指数变换用于扩展高灰度区,一般适于过亮的图像。
对数变换是指输出图像的像素点灰度值与对应的输入图像的像素灰度值之间为对数关系,其一般公式为
在这里插入图片描述
其中,lg表示以10为底。也可以选用自然对数ln。为了增加变换的动态范围,在上述一般公式中可以加入一些调制参数,这时的变换公式为
在这里插入图片描述
式中a,b,c都是可以选择的参数,式中f(x,y)+1是为了避免对0求对数,确保ln[f(x,y)+1]≥0。当f(x,y)=0时,ln[f(x,y)+1]=0,则y=a,a为Y轴上的截距,确定变换曲线的初始位置,b、c两个参数确定变换曲线的变换率。对数变换用于拓展低灰度区,一般适用于过暗的图像。
对图像进行非线性灰度变换,并显示函数的曲线图。

clear all
clf
a=imread('tire.tif');
subplot(131)
imshow(a)
title('原始图像')
% 显示函数的曲线图
x=1:255;
y=x+x.*(255-x)/255;
subplot(132)
plot(x,y)
title('函数的曲线图')
b1=double(a)+0.006*double(a).*(255-double(a));
subplot(133)
imshow(uint8(b1))
title('非线性处理效果')

在这里插入图片描述
对图像进行对数非线性灰度变换

clear all
clf
I=imread('office_4.jpg');
I1=rgb2gray(I);
subplot(121)
imshow(I1)
title('灰度图像')
axis([50,250,50,200]);
grid on;
axis on;
J=double(I1);
J=40*(log(J+1));
H=uint8(J);
subplot(122)
imshow(H)
title('对数变换图像')
axis([50,250,50,200])
grid on
axis on

在这里插入图片描述

2.MATLAB的灰度变换函数

在MATLAB中,imadjust函数用于规定输出图像的像素范围,常用的调用方法如下

J=imadjust(I)
J=imadjust(I,[low_in;high_in],[low_out;high_out])
J=imadjust(I,[low_in;high_in],[low_out;high_out],gamma)

其中,I是输入的图像,J是返回的调整后的图像,该函数把在[low_in;high_in]的像素值调整到[low_out,high_out],而低于low_in的像素值映射为low_out,高于low_in的像素值映射为high_out,gamma描述了输入图像和输出图像之间映射曲线的形状。
gamma校正也是数字图像处理中常用的图像增强技术。imadjust函数中的gamma因子既是这里所说的gamma校正的参数。gamma因子的取值决定了输入图像到输出图像的灰度映射方式,即决定了增强低灰度还是增强高灰度。当gamma等于1时,为线性变换。
调整灰度来增加图像的对比度

clear all
clf
I=imread('glass.png');
subplot(221)
imshow(I)
title('原图像')
subplot(222)
imhist(I)
title('原图像直方图')
subplot(223)
J=imadjust(I,[],[0.4,0.6]);%调整图像的灰度到指定的范围
imshow(J)
title('调整后的灰度图像')
subplot(224)
imhist(J)
title('调整后的灰度直方图')

在这里插入图片描述
利用gamma校正处理图像

clear all
clf
for i=0:255
    f=power((i+0.5)/256,1/2.2);
    LUT(i+1)=uint8(f*256-0.5);
end
img=imread('onion.png');
img0=rgb2ycbcr(img);
R=img(:,:,1);
G=img(:,:,2);
B=img(:,:,3);
Y=img0(:,:,1);
Yu=img0(:,:,1);
[x y]=size(Y);
for row=1:x
    for width=1:y
        for i =0:255
            if(Y(row,width)==i)
                Y(row,width)=LUT(i+1);
                break
            end
        end
    end
end
img0(:,:,1)=Y;
img1=ycbcr2rgb(img0);
R1=img1(:,:,1);
G1=img1(:,:,2);
B1=img1(:,:,3);
subplot(121)
imshow(img)
title('原图')
subplot(122)
imshow(img1)
title('gamma校正后的图像')

在这里插入图片描述

3.最大熵法增强对比度

直方图的拉伸和均衡化都能突出图像中所隐藏的信息。为了使图像的对比度得到增强,用最大熵法对图像进行处理,突出图像的特征。最大熵法基本思想是:
(1)求满足某些约束的信源事件概率分布时,应使得信源的熵最大;
(2)可以依据有限的数据达到尽可能客观的效果;
(3)克服可能引入的偏差。
利用最大熵原理主要有以下两个依据:主观依据和客观依据。
主观依据:又叫“不充分理由原理”,也叫“中性原理”。如果对所求的概率分布无任何先验信息,没有任何依据证明某种事件可能比任何其它事件优先,只能假定所有可能是等概率的。
客观依据:Jaynes提出熵集中定理,满足给定约束的概率分布绝大多数集中在使熵最大的区域。较大熵的分布具有较高的多样性,所以实现的方法也更多,这样越有可能观察到。MaxPlank指出大自然好像对较大熵的情况更偏爱,即在满足给定约束条件下,事物总是力图达到最大熵。
在信息科学中,熵表示的是信息的不确定性的量度,其数学表达式为
在这里插入图片描述
式中,X的具体内容跟信息量无关,于是H(x)可以写成
在这里插入图片描述
熵满足
在这里插入图片描述
第一个等号在X为确定值的时候成立(没有变化的可能);第二个等号在X均匀分布的时候成立。
当每一事件发生的概率相等时,熵取最大值,即不确定性最大,随机程度越大,其熵越大。最大信息熵原理就是在一定约束条件下,求得一概率分布,使其信息熵取得最大值。
下面举例说明利用最大信息熵原理使图像对比度增强。在本例中,myhisteq函数的作用是利用最大熵原理对图像进行增强,其调用格式如下:

[wnew1,h1]=myhisteq(w)

其中,w为输入的灰度图像,wnew1为输出后增强的图像,h1为变换后的直方图。增强对比度的步骤如下:
(1)读取图像
(2)对灰度图像进行增强
(3)对彩色图像进行增强
(4)利用myhisteq函数对灰度图像和彩色图像进行增强
最大熵原理使图像的对比度增强的程序如下。

function [wnew1,h1]=myhisteq(w)
[m,n]=size(w) %图像的大小
s=m*n;
a=zeros(1,256);
for j=1:m  %计算像素值为012...255的个数
    for k=1:n
        l=w(j,k)+1;
        a(l)=a(l)+1;
    end
end
h=zeros(1,256);
h=a/s;   %计算像素值为012...255的比例
hcum=zeros(1,256);
for i=1:m
    for j=1:n
        hc=0;
        for k=0:w(i,j)
            hc=hc+h(k+1);
        end
        hcum(w(i,j)+1)=hc;
        wnew(i,j)=255*hc;
    end
end
wnew1=uint8(wnew);
count1=zeros(1,256);
for j=1:m
    for k=1:n
        l=wnew1(j,k)+1;
    end
end
h1=zeros(1,256);
h1=count1/s;%计算变换后图像的直方图

对比度增强主程序

clear all
clf
%% 读取图像并对其调整大小
cell=imread('cell.tif');
pout=imread('pout.tif');
[X map]=imread('trees.tif');%读取索引图像
trees=ind2rgb(X,map);% 转化为真彩色图像
width=210;%转化为统一宽度,以便进行对比
images={cell,pout,trees};
for K=1:3
    dim=size(images{K});
    images{K}=imresize(images{K},...
        [width*dim(1)/dim(2) width],'bicubic');
end
cell=images{1};
pout=images{2};
trees=images{3};
%% 使用不同方法对图像进行增强
cell_imadjust=imadjust(cell);%使用imadjust函数对图像进行增强
cell_histeq=histeq(cell);%使用histeq函数对图像进行增强
cell_adapthisteq=adapthisteq(cell);%使用adapthisteq函数进行增强
figure
subplot(221)
imshow(cell)
title('Original')
subplot(222)
imshow(cell_imadjust);
title('Imadjust')
subplot(223)
imshow(cell_histeq)
title('Histeq')
subplot(224)
imshow(cell_adapthisteq)
title('Adapthisteq');
%%
pout_imadjust=imadjust(pout);%使用imadjust函数对图像进行增强
pout_histeq=histeq(pout);%使用histeq函数对图像进行增强
pout_adapthisteq=adapthisteq(pout);%使用adapthisteq函数进行增强
figure;
subplot(221)
imshow(pout)
title('Original')
subplot(222)
imshow(pout_imadjust);
title('Imadjust')
subplot(223)
imshow(pout_histeq)
title('Histeq')
subplot(224)
imshow(pout_adapthisteq)
title('Adapthisteq');
%% 显示图像的直方图
figure
subplot(121)
imhist(cell)  %显示cell图像的直方图
title('cell.tif')
subplot(122)
imhist(pout)
title('pout.tif')
%% 对彩色图像进行增强
srgb2lab=makecform('srgb2lab');%rgb彩色空间变为L*a*b*空间结构
lab2srgb=makecform('lab2srgb')%L*a*b*变为rgb空间结构
trees_lab=applycform(trees,srgb2lab);%图像变换到L*a*b*空间
max_luminosity=100;%规定最大的光照值
L=trees_lab(:,:,1)/max_luminosity;%归一化
trees_imadjust=trees_lab;
trees_imadjust(:,:,1)=imadjust(L)*...
    max_luminosity;%使用imadjust函数进行增强
trees_imadjust=applycform(trees_imadjust,...
    lab2srgb);%变换到rgb彩色空间
trees_histeq=trees_lab;
trees_histeq(:,:,1)=histeq(L)*...
    max_luminosity;%使用histeq函数进行增强
trees_histeq=applycform(trees_histeq,...
    lab2srgb);%变换到rgb彩色空间
trees_adapthisteq=trees_lab;
trees_adapthisteq=applycform(trees_adapthisteq,...
    lab2srgb);
figure
subplot(221)
imshow(trees)
title('Original')
subplot(222)
imshow(trees_imadjust)
title('Imadjust')
subplot(223)
imshow(trees_histeq)
title('Histeq')
subplot(224)
imshow(trees_adapthisteq)
title('Adapthisteq')

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值