数字图像处理实验(1)——直方图均衡化

Honey ·
更新时间:2024-09-20
· 702 次阅读

实验题目:

编程实现灰度和彩色图像的直方图均衡化处理。要求给出原始图像的直方图、均衡化图像及其直方图和直方图均衡化时所用的灰度级变换曲线图。注意彩色图像需要编程实现图像由RGB色彩空间到HSI的变换,然后在亮度通道上进行直方图均衡化。

源码:

对灰度图像的处理,给出原始图像的直方图、均衡化图像及其直方图和直方图均衡化时所用的灰度级变换曲线图

// 灰度图像 clear %读入彩色图像将其灰度化 pic=imread('grey.png'); imshow(pic) %显示出来 title('输入的灰色png图像') %绘制直方图 [m,n]=size(pic); %测量图像尺寸参数 GP=zeros(1,256); %预创建存放灰度出现概率的向量 N=zeros(1,256); for k=0:255 N(k+1) = length(find(pic==k)); GP(k+1)=length(find(pic==k))/(m*n); % 计算每级灰度出现的概率,将其存入 GP 中相应位置 end figure,bar(0:255,GP,'b') %绘制直方图title('原图像直方图') xlabel('灰度值') ylabel('出现概率') %直方图均衡化 CF=zeros(1,256); for i=1:256 for j=1:i CF(i)=GP(j)+CF(i); %计算 Sk end end S2=round((CF*256)+0.5); %将 Sk 归到相近级的灰度 for i=1:256 GPeq(i)=sum(GP(find(S2==i))); %计算现有每个灰度级出现的概率 end figure,bar(0:255,GPeq,'b') %显示均衡化后的直方图title('均衡化后的直方图') xlabel('灰度值') ylabel('出现概率') %图像均衡化 PA=pic; for i=0:255 PA(find(pic==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素 end figure,imshow(PA) %绘制灰度级变换曲线 figure plot(0:255,S2,'r') xlabel('均值化前') ylabel('均值化后') grid on legend('灰度级变换曲线');

对彩色图像的处理,给出原始图像的直方图、均衡化图像及其直方图和直方图均衡化时所用的灰度级变换曲线图。注意彩色图像需要编程实现图像由RGB色彩空间到HSI的变换,然后在亮度通道上进行直方图均衡化。

// 彩色图像 function pic2() clear; pic=imread('color.jpg'); %读入 JPG 彩色图像文件 imshow(pic) %显示出来 title('原图像'); [M,N,D] = size(pic); %提取单通道分量 pic=double(pic); r=pic(:,:,1); g=pic(:,:,2); b=pic(:,:,3); %实现转换 angle=acos(0.5*((r-g)+(r-b))./(sqrt((r-g).^2+(r-b).*(g-b)))); if (b>=g) H = 2*pi-angle; else H = angle; end H=H/(2*pi); S=1-3.*(min(min(r,g),b))./(r+g+b); H(S==0)=0; I=(r+g+b)/3; I=uint8(I);%范围不超[0,255] %统计像素亮度 INumPixel = zeros(1,256);%用长度为256的一维数组统计各灰度值的数目 for i = 1:M for j = 1: N INumPixel(I(i,j) + 1) = INumPixel(I(i,j) + 1) + 1; end end %亮度直方图 GP = zeros(1,256); for i = 1:256 GP(i) = INumPixel(i) / (M * N * 1.0); end figure,bar(0:255,GP,'b') %绘制直方图title('原图像直方图') xlabel('亮度值') ylabel('出现概率') %直方图均衡化 S2 = zeros(1,256); for i = 1:256 if i == 1 S2(i) = GP(i); else S2(i) = S2(i - 1) + GP(i); end end %将S2乘上最大灰度255并且向上取整 S2 = uint8(255 .* S2 + 0.5); %将原图像各个位置灰度值映射到新值 for i = 1:M for j = 1: N Inew(i,j) = S2(I(i,j)+1); end end for i=1:256 GPeq(i)=sum(GP(find(S2==i))); %计算现有每个灰度级出现的概率 end figure plot(0:255,GPeq,'b') %显示均衡化后的直方图title('均衡化后的直方图') xlabel('亮度值') ylabel('出现概率') %绘制亮度级变换曲线 figure plot(0:1:255,S2,'r') xlabel('均值化前') ylabel('均值化后') grid on legend('亮度级变换曲线'); I=Inew; H=H*2*pi; I=double(I); S=double(S); H=double(H); [m,n]=size(H); %转换 for i = 1:m for j = 1:n if (0<=H(i,j))&(H(i,j)<2*pi/3) B(i,j)=I(i,j).*(1-S(i,j)); R(i,j)=I(i,j).*(1+S(i,j).*cos(H(i,j))./cos(pi/3-H(i,j))); G(i,j)=3*I(i,j)-(R(i,j)+B(i,j)); end if (2*pi/3<=H(i,j))&(H(i,j)<4*pi/3) H(i,j)=H(i,j)-2*pi/3; R(i,j)=I(i,j).*(1-S(i,j)); G(i,j)=I(i,j).*(1+S(i,j).*cos(H(i,j)-2*pi/3)./cos(pi-H(i,j))); B(i,j)=3*I(i,j)-(R(i,j)+G(i,j)); end if (4*pi/3<=H(i,j))& (H(i,j)<2*pi) H(i,j)=H(i,j)-4*pi/3; G(i,j)=I(i,j).*(1-S(i,j)); B(i,j)=I(i,j).*(1+S(i,j).*cos(H(i,j)-4*pi/3)./cos(5*pi/3-H(i,j))); R(i,j)=3*I(i,j)-(G(i,j)+B(i,j)); end end end output3=cat(3,R,G,B); output3=uint8(output3); figure imshow(output3) 实验结果

灰度图像
灰度原图 在这里插入图片描述
在这里插入图片描述 在这里插入图片描述
在这里插入图片描述

彩色图像
在这里插入图片描述晋亨话之秋

在这里插入图片描述 在这里插入图片描述
在这里插入图片描述

通过原始图像和均衡化后的图像对比,原始图像直方图与均衡化后直方图对比,均衡化后的直方图灰度值更加平均,在整幅图像中不再集中。


作者:S焱殿下



直方图均衡 数字图像 直方图均衡化 数字图像处理 直方图 图像处理

需要 登录 后方可回复, 如果你还没有账号请 注册新账号