点运算又称为对比度增强、对比度拉伸或灰度变换,是一种通过图像中的每一个像素值(即像素点上的灰度值)进行运算的图像处理方式。它将输入图像映射为输出图像,输出图像每个像素点的灰度值仅由对应的输入像素点的灰度值决定,运算结果不会改变图像内像素点之间的空间关系,其运算的数学关系式:
其中表示原图像,表示经过点运算处理后的图像,表示点运算的关系函数。按照灰度变换的数学关系点运算可以分为线性灰度变换、分段线性灰度变换和非线性灰度变换三种。
线性灰度变换
close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量
clear all;
clc;
gamma=0.5; %设定调整线性度取值
I=imread('peppers.png'); %读入要处理的图像,并赋值给I
R=I; %将图像数据赋值给R
R (:,:,2)=0; %将原图像变成单色图像,保留红色
R(:,:,3)=0;
R1=imadjust(R,[0.5 0.8],[0 1],gamma); %利用函数imadjust调整R的灰度,结果返回R1
G=I; %将图像数据赋值给G
G(:,:,1)=0; %将原图像变成单色图像,保留绿色
G(:,:,3)=0;
G1=imadjust(G,[0 0.3],[0 1],gamma); %利用函数imadjust调整G的灰度,结果返回G1
B=I; %将图像数据赋值给B
B(:,:,1)=0; %将原图像变成单色图像,保留蓝色
B(:,:,2)=0;
B1=imadjust(B,[0 0.3],[0 1],gamma); %利用函数imadjust调整B的灰度,结果返回B1
I1=R1+G1+B1; %求变换后的RGB图像
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置
figure(1)
subplot(121),imshow(R);%绘制R、R1、G、G1、B、B1图像,观察线性灰度变换结果
subplot(122),imshow(R1);
figure(2);
subplot(121),imshow(G);
subplot(122),imshow(G1);
figure(3);
subplot(121),imshow(B);
subplot(122),imshow(B1);
figure(4);
subplot(121),imshow(I);
subplot(122),imshow(I1);
imadjust在数字图像处理中用于进行图像的灰度变换(调节灰度图像的亮度或彩色图像的颜色矩阵)。
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)
newmap = imadjust(map,[low_in; high_in],[low_out;high_out],gamma)
RGB2 = imadjust(RGB1,___)
gpuarrayB = imadjust(gpuarrayA,___)
J = imadjust(I)
将灰度图像 I 中的亮度值映射到 J 中的新值并使 1% 的数据是在低高强度和饱和,这增加了输出图像 J 的对比度值。此用法相当于 imadjust(I,stretchlim(I))
J = imadjust(I,[low_in; high_in],[low_out; high_out])
将图像I中的亮度值映射到J中的新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in 以下与 high_in 以上的值被剪切掉了,也就是说,low_in 以下的值映射到 low_out,high_in 以上的值映射到high_out。它们都可以使用空的矩阵[],默认值是[0 1]。
J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)
将图像 I 中的亮度值映射到 J 中的新值,其中== gamma指定描述值I和值J关系的曲线形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。==
newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)
调整索引色图像的调色板map。如果low_in, high_in, low_out, high_out 和 gamma 都是标量,那么对 r,g,b 分量同时都做此映射。对于每个颜色分量都有唯一的映射,当 low_in 和 high_in 同时为13向量或者 low_out 和 high_out 同时为13向量或者 gamma 为1*3向量时。调整后的颜色矩阵 newmap 和 map 有相同的大小。
RGB2 = imadjust(RGB1,…)
对 RGB 图像 RGB1 的红、绿、蓝调色板分别进行调整。随着颜色矩阵的调整,每一个调色板都有唯一的映射值。
分段线性灰度变换
close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量
clear all;
clc;
R=imread('peppers.png');%读入原图像,赋值给R
J=rgb2gray(R); %将彩色图像数据R转换为灰度图像数据J
[M,N]=size(J); %获得灰度图像数据J的行列数M,N
x=1;y=1; %定义行索引变量x、列索引变量y
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
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置
subplot(121),imshow(J)%显示处理前后的图像
subplot(122),imshow(H);
非线性灰度变换
close all; %关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量
clear all;
clc
R=imread('peppers.png'); %读入图像,赋值给R
G=rgb2gray(R); %转成灰度图像
J=double(G); %数据类型转换成双精度
H=(log(J+1))/10; %进行基于常用对数的非线性灰度变换
set(0,'defaultFigurePosition',[100,100,1000,500]);%修改图形图像位置的默认设置
set(0,'defaultFigureColor',[1 1 1])%修改图形背景颜色的设置
subplot(121),imshow(G);%显示图像
subplot(122),imshow(H);