基于matlab的直方图均衡化代码

2007-04-15 20:15

clear all

%一,图像的预处理,读入彩***像将其灰度化

PS=imread(‘1.jpg‘);                 %读入JPG彩***像文件

imshow(PS)                                  %显示出来

title(‘输入的彩色JPG图像‘)

imwrite(rgb2gray(PS),‘PicSampleGray.bmp‘); %将彩***片灰度化并保存

PS=rgb2gray(PS);                            %灰度化后的数据存入数组

%二,绘制直方图

[m,n]=size(PS);                             %测量图像尺寸参数

GP=zeros(1,256);                            %预创建存放灰度出现概率的向量

for k=0:255

GP(k+1)=length(find(PS==k))/(m*n);      %计算每级灰度出现的概率,将其存入GP中相应位置

end

figure,bar(0:255,GP,‘g‘)                    %绘制直方图

title(‘原图像直方图‘)

xlabel(‘灰度值‘)

ylabel(‘出现概率‘)

%三,直方图均衡化

S1=zeros(1,256);

for i=1:256

for j=1:i

S1(i)=GP(j)+S1(i);                 %计算Sk

end

end

S2=round((S1*256)+0.5);                          %将Sk归到相近级的灰度

for i=1:256

GPeq(i)=sum(GP(find(S2==i)));           %计算现有每个灰度级出现的概率

end

figure,bar(0:255,GPeq,‘b‘)                  %显示均衡化后的直方图

title(‘均衡化后的直方图‘)

xlabel(‘灰度值‘)

ylabel(‘出现概率‘)

%四,图像均衡化

PA=PS;

for i=0:255

PA(find(PS==i))=S2(i+1);                %将各个像素归一化后的灰度值赋给这个像素

end

figure,imshow(PA)                           %显示均衡化后的图像

title(‘均衡化后图像‘)

imwrite(PA,‘PicEqual.bmp‘);

用imadjust函数

imadjust:调整图像的强度值或颜色用法形式:

J = imadjust(I)

J = imadjust(I,[low_in; high_in],[low_out; high_out])

J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma)

newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)

RGB2 = imadjust(RGB1,...)

用法说明:

J = imadjust(I)将灰度图像I中的亮度值映射到J中的新值并使1%的数据是在低高强度和饱和,这增加了输出图像J的对比度值;

此用法相当于imadjust(I,stretchlim(I)).

J = imadjust(I,[low_in; high_in],[low_out; high_out])   将图像I中的亮度值映射到J中的新值,即将low_in至hige_in之间的值映射到low_out至high_out之间的值。low_in以下与high_in以上的值被剪切掉了,也就是说,low_in以下的值映射到low_out,high_in以上的值映射到high_out。它们都可以使用空的矩阵[],默认值是[0 1]。

J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma) 将图像I中的亮度值映射到J中的新值,其中gamma指定描述值I和值J关系的曲线形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为1(线性映射).

newmap = imadjust(map,[low_in; high_in],[low_out; high_out],gamma)调整索引***像的调色板map。如果low_in, high_in, low_out, high_out和gamma都是标量,那么对r,g,b分量同时都做此映射。对于每个颜色分量都有唯一的映射,当low_in和high_in同时为1*3向量或者low_out 和 high_out 同时为1*3向量或者gamma为1*3向量时。调整后的颜色矩阵newmap 和map有相同的大小。

RGB2 = imadjust(RGB1,...) 对RGB图像RGB1的红、绿、蓝调色板分别进行调整。随着颜色矩阵的调整,每一个调色板都有唯一的映射值。

注意:如果high_out < low_out, 输出图像是颠倒的,像摄像底片.

举例:

调整低对比度灰度图像:

I = imread(‘pout.tif‘);

J = imadjust(I);

imshow(I), figure, imshow(J)

调整灰度图像,指定范围:

K = imadjust(I,[0.3 0.7],[]);figure, imshow(K)调整RGB图像

RGB1 = imread(‘football.jpg‘);RGB2 = imadjust(RGB1,[.2 .3 0; .6 .7 1],[]);imshow(RGB1), figure, imshow(RGB2)

时间: 2024-12-16 16:10:05

基于matlab的直方图均衡化代码的相关文章

OpenCV-跟我一起学数字图像处理之直方图均衡化

从这篇博文开始,小生正式从一个毫不相干专业转投数字图像处理.废话不多说了,talk is cheap. show me the code. 直方图均衡化目的 由于一些图像灰度的分布过于集中,这样会导致图像的层次不够分明,直方图均衡化就是为了让图像的灰度分布更均匀,图像的层次感更强. 数学原理 基于连续灰度分布的结论推导 直方图均衡化属于数字图像处理中灰度变换(intensity transformation)的内容,灰度变换的目的就是找到一个合适的映射函数s=T(r).将原图像的灰度值映射到新的

OpenCV2马拉松第9圈——再谈对比度(对比度拉伸,直方图均衡化)

收入囊中 lookup table 对比度拉伸 直方图均衡化 葵花宝典 lookup table是什么东西呢? 举个例子,假设你想把图像颠倒一下,f[i] = 255-f[i],你会怎么做? for( int i = 0; i < I.rows; ++i) for( int j = 0; j < I.cols; ++j ) I.at<uchar>(i,j) = 255 - I.at<uchar>(i,j); 大部分人应该都会这么做.或者: for( i = 0; i &

matlab 直方图均衡化

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

直方图均衡化的计算以及MATLAB实现

直方图均衡,这里不写公式,只看怎么算 一.手算直方图均衡 例如一个矩阵 \[源矩阵= \left[ \begin{matrix} 4&4&4&4&4&4&4&0\4&5&5&5&5&5&4&0\4&5&6&6&6&5&4&0\4&5&6&7&6&5&4&0\4&5&6&

直方图均衡化(matlab)

对图像(灰度图)进行直方图均衡化主要有一下几个步骤: 1.计算各个灰度值(0-255)出现的次数 2.计算各个灰度值的累积分布率 2.根据累积分布率计算出原来各灰度值的均衡化之后的新的值 %直方图均衡化 clear; I = imread('1.bmp'); [height,width] = size(I); figure subplot(221) imshow(I)%显示原始图像 subplot(222) imhist(I)%显示原始图像直方图 %进行像素灰度统计; s = zeros(1,2

图像处理------直方图均衡化

一.直方图均衡化数学推导 直方图均衡化的总体思想:首先考虑连续函数并且让变量r代表待增强图像的灰度级,假设被归一化到区间[0,1],且r=0表示黑色及r=1表示白色.然后再考虑一个离散公式并允许像素值在区间[0,L-1]内. 对于连续函数而言,假设其变换函数为 s=T(r),  0=<r<=1 在原始图像中,对于每一个像素值r产生一个灰度值s.其中,变换函数要满足以下条件: (1)T(r)在区间中为单值且单调递增.这是为了保证其逆函数的存在,并且输出图像从黑到白顺序增加: (2)当0=<

彩色图像的直方图均衡化

彩色图像的直方图均衡化 - YangYudong2014的专栏 - CSDN博客 http://blog.csdn.net/yangyudong2014/article/details/40515035 matlab进阶摸索篇——彩色图直方图均衡化 - Rachel Zhang的专栏 - CSDN博客 http://blog.csdn.net/abcjennifer/article/details/6667504 用matlab_实现基于直方图均衡化的彩色图像增强 - 成人教育 - 道客巴巴 h

直方图均衡化原理

直方图均衡化的作用是图像增强. 有两个问题比较难懂,一是为什么要选用累积分布函数,二是为什么使用累积分布函数处理后像素值会均匀分布. 第一个问题.均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒:②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界.综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所

图像直方图均衡化

1. 直方图均衡化介绍 自我感觉书上讲的很清楚,直接把截图贴上了. 在进行直方图均值化的过程如下 读入图像对每个通道分别统计像素值[0,255]出现的次数.对每个通道分别求像素值[0,255]出现的概率,得到概率直方图.对每个通道分别求像素值[0,255]概率的前缀和,得到累计直方图.对每个通道根据累计直方图分别求像素映射函数.对每个通道完成每个像素点的映射.输出直方图均衡化的图像.2.代码(MATLAB) 1 %直方图均衡化 2 I = imread('D:/picture/girl.jpg'