4.Matlab图像灰度变换增强(线性变换和直方图均衡化)

Matlab图像做图像灰度变换增强,包括线性变换和直方图均衡化。

文章目录

  • 题目示例
    • 示例代码

题目示例

对给定的(lena.bmp)图像
1.进行分三段线性变换:0-99/0-49,100-199/50-229,200-255/230-255;
2.计算变换前后图像的直方图;
3.观察图像及直方图的变化;
4.进行图像直方图均衡化处理,观察直方图的变化情况并将结果图像与原图像比较之。

这里的(lena.bmp)图像,如下·
在这里插入图片描述

示例代码

这里笔者为了方便对比和演示,将第1、2、3点要求和第2、3、4点要求分别做到了一个程序中

线性变换

x1=imread('lena256.bmp');
[L1,L2]=size(x1);
a=100;
b=200;
mf=255;
c=50;
d=230;
mg=255;
f=double(x1);
num1=zeros(1,256);
num2=zeros(1,256);
for i=1:L1
    for j=1:L2
        num1(1,f(i,j))=num1(1,f(i,j))+1;
        if(f(i,j)<a&f(i,j)>=0)
            g(i,j)=round(c*f(i,j)/a);
        elseif(f(i,j)<b&f(i,j)>=a)
            g(i,j)=round(((d-c)/(b-a))*(f(i,j)-a)+c);
        elseif(f(i,j)<=mf&f(i,j)>=b)
            g(i,j)=round(((mg-d)/(mf-b))*(f(i,j)-b)+d);
        end
        num2(1,g(i,j))=num2(1,g(i,j))+1;
    end
end
subplot(2,2,1)
imshow(x1)
title('原图')
subplot(2,2,2)
imshow(uint8(g))
title('分段线性灰度变换后')
subplot(2,2,3)
bar(num1);
title('原图的直方图')
subplot(2,2,4)
bar(num2);
title('分段线性灰度变换后的直方图')

运行结果为
4.Matlab图像灰度变换增强(线性变换和直方图均衡化)_第1张图片

直方图均衡化

x1=imread('lena256.bmp');
[L1,L2]=size(x1);
f=double(x1);
num1=zeros(1,256);
num3=zeros(1,256);
for i=1:L1
    for j=1:L2
        num1(1,f(i,j))=num1(1,f(i,j))+1;
    end
end
pk=num1/(L1*L2);
sk=cumsum(pk);
sk=uint8(255 .* sk+1);
for i=1:L1
    for j=1:L2
        y(i,j)=sk(f(i,j));
        num3(1,y(i,j))=num3(1,y(i,j))+1;
    end
end
subplot(2,2,1)
imshow(x1)
title('原图')
subplot(2,2,2)
imshow(y)
title('直方图均衡化后')
subplot(2,2,3)
bar(num1);
title('原图的直方图')
subplot(2,2,4)
bar(num3);
title('直方图均衡化后的直方图')

运行结果为
4.Matlab图像灰度变换增强(线性变换和直方图均衡化)_第2张图片

你可能感兴趣的:(数字图像处理,数字图像处理,matlab)