【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小时内删除。