【zz】matlab 直方图匹配

原文地址:http://www.cnblogs.com/tiandsp/archive/2012/12/19/2825418.html

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

  总共有以下几步:

  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))       %新图的直方图

效果如下:

给定的直方图

原图

原图直方图

变换后的直方图

最后的结果

时间: 2024-12-19 21:38:53

【zz】matlab 直方图匹配的相关文章

matlab实现将彩色图像(R,G,B)色分量的直方图匹配,并计算其相关性

函数 实现将彩色图像转化为直方图分量向量 calcrgb2hist.m 文件 function hist  = calcrgb2hist(picname) pic1 = imread(picname); pic1R = pic1(:,:,1); pic1G = pic1(:,:,2); pic1B = pic1(:,:,3); figure,imshow(pic1R)                  title('R分量的图像') % 二,绘制直方图 [m,n]=size(pic1R);  

《OpenCV:直方图应用:直方图均衡化,直方图匹配,对比直方图》

直方图均衡化 直方图均衡化(Histogram Equalization)是直方图最典型的应用,是图像点运算的一种.对于一幅输入图像,通过运算产生一幅输出图像,点运算是指输出图像的每个像素点的灰度值由输入像素点决定,即: 直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数过程.从分布图上的理解就是希望原始图像中y轴的值在新的分布中尽可能的展开.变换过程是利用累积分布函数对原始分布进行映射,生成新的均匀拉伸的分布.因此对应每个点的操作是寻找原始分布

直方图匹配方法

http://blog.csdn.net/cxf7394373/article/details/6955530 1. 直方图匹配方法 对比直方图相似性的方法有四种: (1)  相关度 (2)  卡方系数 (3)  相交系数 (4)  巴氏距离 在快速但是不怎么准确匹配的情况下,Intersection方法的效果好, 而在慢速但较精确的情况下,用卡方或者巴氏距离效果好. 如果用颜色直方图匹配的方法进行图像匹配,在这种情况下:不同的图片直方图分部也是一致的,采用直方图匹配的方法则没有效果.对于直方图

灰度图像--图像增强 直方图匹配(规定化)Histogram Specification

学习DIP第39天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不满意.有些网站转载了我的博文,很开心的是自己写的东西被更多人看到了,但不开心的是这段话被去掉了,也没标明转载来源,虽然这并没有版权保护,但感觉还是不太好,出于尊重文章作者的劳动,转载请标明出处!!!! 文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro

基于OpenCV和C++底层实现的直方图匹配

直方图匹配算法,又称直方图规定化.简单说,就是根据某函数.或者另外一张图片的引导,使得原图改变. 感觉解释的最好的是:http://www.360doc.com/content/13/1106/16/10724725_327179043.shtml 完整代码:github (里面同时包含OSTU / 大津算法.直方图均衡化等算法,还包括两种测试图片). 因为我个人兴趣爱好(放P就是老师逼的...),不允许使用 OpenCV 封装好的直方图函数.根据实例讲解,了解了直方图匹配算法底层的操作(多说一

matlab 直方图均衡化

原理: 直方图均衡化首先是一种灰度级变换的方法: 原来的灰度范围[r0,rk]变换到[s0,sk]变换函数为:s=T(r); 为便于实现,可以用查找表(look-up table)的方式存储,即:原始的灰度作为查找表的索引,表中的内容是新的灰度值. 其次,直方图均衡化是图像增强的一种基本方法,可提高图像的对比度,即:将较窄的图像灰度范围以一定规则拉伸至较大(整个灰度级范围内)的范围. 目的是在得到在整个灰度级范围内具有均匀分布的图像. 所以,当输入:直方图H(r)[此处指每个灰度级占有的像素数]

MATLAB 直方图,线性变换,直方图均衡化

1.给定图像输出直方图 img = imread('E:\matlab\work\1.jpg'); p=rgb2gray(img); %转为灰度图像 imhist(p); 效果: 2.给定一个线性变换函数,实现图像的灰度拉伸 I = imread('E:\matlab\work\lenna.bmp') I2=I.*2-50 %做线性变换 imshow(I2); %显示经过线性变换后的图像 3.实现对图像的均衡化 I = imread('E:\matlab\work\lenna.bmp'); [h

matlab 直方图

(1)灰度直方图 imhist(I) imhist(I, n)  n灰度级数目 默认等于256 [counts, x]=imhist(...)   counts为直方图的数据向量,counts(a)表示第a个区间像素数目,x保存了对应的小区间的向量,stem(x,counts/m/n)表示直方图概率. (2)彩色图像直方图 i=imread('theatre.jpg'); [x,y,z]=size(i); figure subplot(221), imshow(i); title('origin

[ZZ] matlab中小波变换函数dwt2和wavedec2 系数提取函数appcoef2和detcoef2

https://zhidao.baidu.com/question/88038464.html DWT2是二维单尺度小波变换,其可以通过指定小波或者分解滤波器进行二维单尺度小波分解. 而WAVEDEC2是二维多尺度小波分解. DWT2的一种语法格式是[cA,cH,cV,cD]=dwt2(X,'wname'): 而对应的WAVEDEC2的语法格式是[C,S]=wavedec2(X,N,'wname'),其中N为大于1的正整数. 也就是说DWT2只能对某个输入矩阵X进行一次分解,而WAVEDEC2可