matlab空域内图像增强之灰度变换增强

版权声明:文章版权归作者所有,请不要随意转载抄袭,情节严重,追究法律责任!! https://blog.csdn.net/Ibelievesunshine/article/details/79958486

空域内的图像增强就是调整灰度图像的明暗对比度,是对图像中各个像素的灰度值直接进行处理。

灰度变换增强是空域内对图像进行增强的一种简单而有效的方法。灰度变换增强不改变原图像中像素的位置,只改变像素点的灰度值,并逐点进行。为了进行灰度变换,首先要获取灰度图像的直方图。具体实现的代码如下:

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));  %显示增强结果

可以看到图片给人的感觉是清晰度显著增强。


------坚持下去,少年!------

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页