Matlab图像做图像灰度变换增强,包括线性变换和直方图均衡化。
文章目录
- 题目示例
-
- 示例代码
题目示例
对给定的(lena.bmp)图像
1.进行分三段线性变换:0-99/0-49,100-199/50-229,200-255/230-255;
2.计算变换前后图像的直方图;
3.观察图像及直方图的变化;
4.进行图像直方图均衡化处理,观察直方图的变化情况并将结果图像与原图像比较之。
这里的(lena.bmp)图像,如下·示例代码
文章图片
【数字图像处理|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('分段线性灰度变换后的直方图')
运行结果为
文章图片
直方图均衡化
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('直方图均衡化后的直方图')
运行结果为
文章图片
推荐阅读
- 图像处理|图像处理-形态学操作
- 数字图像处理|基于OpenCV的图像配准之后的透视变换
- MATLAB神经网络|SOM网络算法分析与应用(适合入门、快速上手)
- MATLAB|基于matlab车牌识别算法
- matlab|matlab 维纳滤波恢复运动模糊,运动模糊恢复专题
- 图像处理与机器视觉|LM算法
- MATLAB|【OFDM】基于simulink的OFDM系统仿真
- MATLAB|【指数Lyapunov】Lyapunov指数的MATLAB仿真
- MATLAB|模版匹配定位跟踪