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

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

文章目录

  • 题目示例
    • 示例代码

题目示例
对给定的(lena.bmp)图像
1.进行分三段线性变换:0-99/0-49,100-199/50-229,200-255/230-255;
2.计算变换前后图像的直方图;
3.观察图像及直方图的变化;
4.进行图像直方图均衡化处理,观察直方图的变化情况并将结果图像与原图像比较之。
这里的(lena.bmp)图像,如下·
数字图像处理|4.Matlab图像灰度变换增强(线性变换和直方图均衡化)
文章图片

示例代码
【数字图像处理|4.Matlab图像灰度变换增强(线性变换和直方图均衡化)】这里笔者为了方便对比和演示,将第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)=0) g(i,j)=round(c*f(i,j)/a); elseif(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图像灰度变换增强(线性变换和直方图均衡化)
文章图片

直方图均衡化
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图像灰度变换增强(线性变换和直方图均衡化)
文章图片

    推荐阅读