空域内的图像增强就是调整灰度图像的明暗对比度,是对图像中各个像素的灰度值直接进行处理。
灰度变换增强是空域内对图像进行增强的一种简单而有效的方法。灰度变换增强不改变原图像中像素的位置,只改变像素点的灰度值,并逐点进行。为了进行灰度变换,首先要获取灰度图像的直方图。具体实现的代码如下:
close all;clear all;clc;
%获取灰度图像的直方图
I=imread('pout.tif');
row=size(I,1); %图像的行
col=size(I,2); %图像的列
N=zeros(1,256); %创建1行256列的零矩阵
for i=1:row
for j=1:col
k=I(i,j);
N(k+1)=N(k+1)+1; %统计各个灰度值的像素数 灰度值范围0-255
end
end
figure,
subplot(121),imshow(I);
subplot(122),bar(N); %绘制直方图
axis tight; %设置坐标轴
运行结果如下:
从图中可以看到,图像的灰度值主要集中在80-150之间,因此该图像比较模糊。我们可以通过将图像的灰度值均匀地分布在0-255之间,来将图像变得更加清晰。同时,需要将小于80的灰度值设置为0,大于150的灰度值设置为255。将原图像的灰度值设为x,增强图像的灰度值设为y,则得到以下关系:
化简后得:
接下来我们具体实现调整灰度图像的灰度范围,增强图像
close all;clear all;clc;
%调整灰度图像的灰度范围去增强图像
I=imread('pout.tif');
I=double(I);
J=(I-80)*255/70; %具体调整方案
row=size(I,1); %图像的行
col=size(I,2); %图像的列
for i=1:row
for j=1:col
if(J(i,j)<0) %灰度小于0像素的直接赋值为0
J(i,j)=0;
end
if J(i,j)>255; %灰度大于255的像素直接赋值为最大的255
J(i,j)=255;
end
end
end
figure;
subplot(121),imshow(uint8(I)); %显示原始图像 显示时,修改图像的数据格式为uint8类型
subplot(122),imshow(uint8(J)); %显示增强结果
可以看到图片给人的感觉是清晰度显著增强。
------坚持下去,少年!------