【zz】matlab直⽅图匹配
直⽅图匹配或叫做直⽅图规定化都可以,是把原图像的直⽅图按照给定的直⽅图加以映射,使新图像的直⽅图的分布类似于给定的函数。 总共有以下⼏步:
1.求给定的函数的累积直⽅图s。
2.求原图像的累积直⽅图G。
3.求s中每⼀个值在G中距离最⼩的位置index。
4.求原图像每个像素通过index映射到的新像素的值。
代码如下:
clear all;
close all;
clc;
r=127;
x=-r:r+1;
sigma=20;
y1=exp(-((x-80).^2)/(2*sigma^2));
y2=exp(-((x+80).^2)/(2*sigma^2));
y=y1+y2; %双峰⾼斯函数,任意函数都可以
%im=imread('bg.bmp'); %匹配⼀个图像的直⽅图
%y=imhist(im);
y=y/sum(y); %归⼀化,使函数符合概率分布的sum(y)==1这样⼀个规律
plot(y); %待匹配的直⽅图
G=[]; %函数的累积直⽅图
for i=1:256
G=[G sum(y(1:i))];
end
img=imread('lena.jpg');
[m n]=size(img);
hist=imhist(img); %待处理图像的直⽅图
p=hist/(m*n);
figure;plot(p) %原图直⽅图
s=[]; %待处理图像的累积直⽅图
for i=1:256
s=[s sum(p(1:i))];
end
for i=1:256
tmp{i}=G-s(i);
tmp{i}=abs(tmp{i}); %因为要距离最近的点,所以取绝对值
[a index(i)]=min(tmp{i}); %到两个累积直⽅图距离最近的点
end
imgn=zeros(m,n);
for i=1:m
for j=1:n
imgn(i,j)=index(img(i,j)+1)-1; %由原图的灰度通过索引映射到新的灰度
end
matlab直方图end
imgn=uint8(imgn);
figure;imshow(imgn)
figure;plot(imhist(imgn)) %新图的直⽅图
效果如下:
给定的直⽅图原图
原图直⽅图
变换后的直⽅图最后的结果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论