直方图规范化用于图像增强 matlab程序
2012-05-29 17:56
736 查看
题目要求:
1. 直方图的规范化。处理图像:2.bmp。
1) 单映射规则(single mapping law,SML)
2) 组映射规则(group mapping law,GML)
3) 比较SML和GML的误差大小。
规定化函数 y=x
源程序:(参考原理自己写 有两幅图没输出来)
function[]=H_Matching()
clear;
close all;
I=imread('2.bmp');
diff=zeros(256,256);
diff=double(diff);
HistogramSML=zeros(256);
%HistogramSML=double(HistogramSML);
HistogramGML=zeros(256);
%HistogramGML=double(HistogramGML);
scr=zeros(256);
%scr=double(scr);
dest=zeros(256);
%dest=double(dest);
for k=1:256
scr(k+1)=length(find(I==k));
end
scrpro=scr/sum(scr);
for i=2:256
scrpro(i)=scrpro(i-1)+scrpro(i);
end
for i=1:256
dest(i)=i;
end
destpro=dest/sum(dest);
for i=2:256
destpro(i)=destpro(i-1)+destpro(i);
end
for j=1:256
for i=1:256
diff(i,j)=destpro(i)-scrpro(j);
if diff(i,j)<0
diff(i,j)=-diff(i,j);
end
end
end
%SML
for j=1:256
minx=0;
minvalue=diff(1,j);
for i=2:256
if minvalue>diff(i,j)
minvalue=diff(i,j);
minx=i;
end
end
HistogramSML(j)=minx;
end
%SML规定化后直方图
SH=zeros(256);
SH=double(SH);
for i=1:256
SH(HistogramSML(i)+1)=SH(HistogramSML(i)+1)+scr(i);
end
%规定化后概率直方图
SHpro=SH/sum(SH);
subplot(2,3,2);
plot(SHpro);
title('SML映射后的概率直方图');
xlabel('灰度值');
ylabel('概率密度');
%GML
lastStartY=1;
lastEndY=1;
startY=1;
endY=1;
for i=1:256
minvalue=diff(i,1);
for j=2:256
if minvalue>diff(i,j)
minvalue=diff(i,j);
endY=j;
end
end
if (startY~= lastStartY) || (endY~=lastEndY)
for k=startY:endY
HistogramGML(k)=i;
end
lastStartY=startY;
lastEndY=endY;
startY=lastEndY+1;
end
end
%GML规定化后直方图
GH=zeros(256);
GH=double(GH);
for i=1:256
GH(HistogramGML(i)+1)=GH(HistogramGML(i)+1)+scr(i);
end
%规定化后概率直方图
GHpro=GH/sum(GH);
subplot(2,3,3);
plot(GHpro);
title('GML映射后的概率直方图');
xlabel('灰度值');
ylabel('概率密度');
S=zeros(256,256);
%S=double(S);
G=zeros(256,256);
%G=double(G);
subplot(2,3,4);
imshow(I);
subplot(2,4,1);
K=rgb2gray(I);
imhist(K);
title('origin');
for i=1:256
for j=1:256
S(i,j)=HistogramSML(I(i,j)+1);
end
end
subplot(2,3,5);
imshow(S);
title('SML');
for i=1:256
for j=1:256
G(i,j)=HistogramGML(I(i,j)+1);
end
end
subplot(2,3,6);
imshow(G);
title('GML');
运行结果:
标准结果:
1. 直方图的规范化。处理图像:2.bmp。
1) 单映射规则(single mapping law,SML)
2) 组映射规则(group mapping law,GML)
3) 比较SML和GML的误差大小。
规定化函数 y=x
源程序:(参考原理自己写 有两幅图没输出来)
function[]=H_Matching()
clear;
close all;
I=imread('2.bmp');
diff=zeros(256,256);
diff=double(diff);
HistogramSML=zeros(256);
%HistogramSML=double(HistogramSML);
HistogramGML=zeros(256);
%HistogramGML=double(HistogramGML);
scr=zeros(256);
%scr=double(scr);
dest=zeros(256);
%dest=double(dest);
for k=1:256
scr(k+1)=length(find(I==k));
end
scrpro=scr/sum(scr);
for i=2:256
scrpro(i)=scrpro(i-1)+scrpro(i);
end
for i=1:256
dest(i)=i;
end
destpro=dest/sum(dest);
for i=2:256
destpro(i)=destpro(i-1)+destpro(i);
end
for j=1:256
for i=1:256
diff(i,j)=destpro(i)-scrpro(j);
if diff(i,j)<0
diff(i,j)=-diff(i,j);
end
end
end
%SML
for j=1:256
minx=0;
minvalue=diff(1,j);
for i=2:256
if minvalue>diff(i,j)
minvalue=diff(i,j);
minx=i;
end
end
HistogramSML(j)=minx;
end
%SML规定化后直方图
SH=zeros(256);
SH=double(SH);
for i=1:256
SH(HistogramSML(i)+1)=SH(HistogramSML(i)+1)+scr(i);
end
%规定化后概率直方图
SHpro=SH/sum(SH);
subplot(2,3,2);
plot(SHpro);
title('SML映射后的概率直方图');
xlabel('灰度值');
ylabel('概率密度');
%GML
lastStartY=1;
lastEndY=1;
startY=1;
endY=1;
for i=1:256
minvalue=diff(i,1);
for j=2:256
if minvalue>diff(i,j)
minvalue=diff(i,j);
endY=j;
end
end
if (startY~= lastStartY) || (endY~=lastEndY)
for k=startY:endY
HistogramGML(k)=i;
end
lastStartY=startY;
lastEndY=endY;
startY=lastEndY+1;
end
end
%GML规定化后直方图
GH=zeros(256);
GH=double(GH);
for i=1:256
GH(HistogramGML(i)+1)=GH(HistogramGML(i)+1)+scr(i);
end
%规定化后概率直方图
GHpro=GH/sum(GH);
subplot(2,3,3);
plot(GHpro);
title('GML映射后的概率直方图');
xlabel('灰度值');
ylabel('概率密度');
S=zeros(256,256);
%S=double(S);
G=zeros(256,256);
%G=double(G);
subplot(2,3,4);
imshow(I);
subplot(2,4,1);
K=rgb2gray(I);
imhist(K);
title('origin');
for i=1:256
for j=1:256
S(i,j)=HistogramSML(I(i,j)+1);
end
end
subplot(2,3,5);
imshow(S);
title('SML');
for i=1:256
for j=1:256
G(i,j)=HistogramGML(I(i,j)+1);
end
end
subplot(2,3,6);
imshow(G);
title('GML');
运行结果:
标准结果:
相关文章推荐
- 【转】 直方图规范化用于图像增强 matlab程序
- MATLAB图像增强程序举例
- matlab练习程序(模糊集图像增强)
- MATLAB图像增强程序举例
- 【转】 MATLAB图像增强程序举例
- 直方图和直方图均衡的Matlab完整程序(数字图像处理)
- matlab 数字图像处理 图像增强 空域 直方图修正
- MATLAB图像增强程序
- matlab实现图像增强
- matlab练习程序(Arnold图像置乱)
- MatlabGUI图像界面入门程序——加法界面
- 【原创】图像颜色分布直方图设计[matlab]
- matlab练习程序(求灰度图像最大灰度,最小灰度,平均灰度)
- 用于图像去雾的优化对比度增强算法
- matlab练习程序(简单图像融合)
- 用MATLAB求图像直方图的算法
- [matlab图像处理] 直方图归一化
- matlab练习程序(图像滤波时的边界处理)
- 基于直方图的图像增强算法(HE、CLAHE、Retinex)之(一)
- 基于SIFT点特征匹配的图像配准MATLAB程序