欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matlab图像点运算 对比度增强 对比度拉伸 灰度变换

程序员文章站 2024-03-08 09:01:10
...

点运算又称为对比度增强、对比度拉伸或灰度变换,是一种通过图像中的每一个像素值进行运算的图像处理方式。。它将输入图像映射为输出图像,输出图像每个像素点的灰度值仅有对应的输入像素点的灰度值决定,运算结果不会改变图像内像素点之间的空间关系。其运算的数学关系式如下:

matlab图像点运算 对比度增强 对比度拉伸 灰度变换

其中,A(x,y)表示原图像,B(x,y)表示经过点运算处理后的图像,f表示点运算的关系函数。按照灰度变换的数学关系,点运算可以分为线性灰度变换、分段线性灰度变换和非线性灰度变换3种。接下来我们分别举例实现。

1. 线性灰度变换

假定原图像A(x,y)的灰度变换范围为[a,b],处理后的图像B(x,y)的灰度变换范围为[c,d],线性灰度变换运算的数学表达式为:

matlab图像点运算 对比度增强 对比度拉伸 灰度变换

在MATLAB图像处理工具箱中提供了一个灰度线性变换函数imadjust()

close all;clear all;clc;
%通过函数imadjust()对图像进行线性灰度变换
gamma=0.5;  %设定调整线性度取值
I=imread('F:/pao1.jpg');
R=I;  %将图像数据赋值给R
R(:,:,2)=0;  %将原图像变成单色图像,保留红色
R(:,:,3)=0;
R1=imadjust(R,[0.5 0.8],[0 1],gamma);  %利用函数imajust()调整R的灰度,结果返回R1
G=I;
G(:,:,1)=0;  %将原图像变成单色图像,保留绿色
G(:,:,3)=0;
G1=imadjust(G,[0 0.3],[0 1],gamma);  %利用函数imajust()调整G的灰度,结果返回G1
B=I;
B(:,:,1)=0;  %将原图像变成单色图像,保留蓝色
B(:,:,2)=0;
B1=imadjust(B,[0 0.3],[0 1],gamma);  %利用函数imajust()调整B的灰度,结果返回B1
I1=R1+G1+B1;  %求变换后的RGB图像
figure,
subplot(131),imshow(I);
subplot(132),imshow(R);
subplot(133),imshow(R1);
figure,
subplot(131),imshow(I);
subplot(132),imshow(G);
subplot(133),imshow(G1);
figure,
subplot(131),imshow(I);
subplot(132),imshow(B);
subplot(133),imshow(B1);
figure,
subplot(121),imshow(I);
subplot(122),imshow(I1);

matlab图像点运算 对比度增强 对比度拉伸 灰度变换

matlab图像点运算 对比度增强 对比度拉伸 灰度变换

matlab图像点运算 对比度增强 对比度拉伸 灰度变换

matlab图像点运算 对比度增强 对比度拉伸 灰度变换

2. 分段线性灰度变换

为了突出图像中感兴趣的目标或者灰度区间,可采用分段线性法,将需要的图像细节灰度拉伸,对比度增强。3段线性变换法运算的数学表达式如下:

matlab图像点运算 对比度增强 对比度拉伸 灰度变换

close all;clear all;clc;
%分段线性灰度变换
R=imread('F:/pao1.jpg');
J=rgb2gray(R);  %将彩色图像数据R转换为灰度图像数据J
[M,N]=size(J);  %获得灰度图像J的行列数M,N
x=1;y=1;
for x=1:M
    for y=1:N
        if (J(x,y)<=35);  %对灰度图像J进行分段处理,处理后的结果返回给矩阵H
            H(x,y)=J(x,y)*10;
        elseif(J(x,y)>35&J(x,y)<=75);
            H(x,y)=(10/7)*[J(x,y)-5]+50;
        else(J(x,y)>75);
            H(x,y)=(105/180)*[J(x,y)-75]+150;
        end
    end
end
figure,
subplot(121),imshow(J);
subplot(122),imshow(H);

matlab图像点运算 对比度增强 对比度拉伸 灰度变换

3. 非线性灰度变换

当输出图像的像素点灰度值和输入图像的像素点灰度值不满足线性关系时,这种灰度变换都称为非线性灰度变换,我们以对数变换的非线性变换为例,讲解非线性灰度变换。变换公式如下:

matlab图像点运算 对比度增强 对比度拉伸 灰度变换

close all;clear all;clc;
%基于对数变换的非线性灰度变换
R=imread('F:/pao1.jpg');
G=rgb2gray(R);  %转换成灰度图像
J=double(G);  %数据类型转换为双精度
H=(log(J+1))/10;  %进行基于常用对数的非线性灰度变换
figure,
subplot(121),imshow(G);
subplot(122),imshow(H);

matlab图像点运算 对比度增强 对比度拉伸 灰度变换

总结:

以上三种方法给出了三种不同类型的点运算,它们的相同之处在于都能够改变图像的显示灰度,不同之处在于采用的数学方法不同。用户在需要进行图形灰度变换时,根据实际情况选择不同的运算形式,用户可参照实例设计自己的灰度变换。


------想飞上天,和太阳肩并肩------