图像处理技术课第二次试验(2)——图像的规定化处理_0
图像处理技术课第二次试验(2)——图像的规定化处理_0
天蚕宝衣 发表于9个月前
图像处理技术课第二次试验(2)——图像的规定化处理_0
  • 发表于 9个月前
  • 阅读 5
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

直方图匹配或叫做直方图规定化都可以,是把原图像的直方图按照给定的直方图加以映射,使新图像的直方图的分布类似于给定的函数。

  总共有以下几步:

  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
end

imgn=uint8(imgn);
figure;imshow(imgn)
figure;plot(imhist(imgn))       %新图的直方图

复制代码

效果如下:

给定的直方图

原图

原图直方图

变换后的直方图

最后的结果

共有 人打赏支持
粉丝 16
博文 222
码字总数 146332
×
天蚕宝衣
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: