直方图均衡化matlab程序
直方图均衡化matlab程序
![直方图均衡化matlab程序](https://img.taocdn.com/s3/m/e1e73403ff00bed5b9f31d50.png)
直方图和直方图均衡的Matlab完整程序(数字图像处理)一、实验目的掌握基本的图象增强方法,观察图象增强的效果,加深对灰度直方图及直方图均衡化的理解,掌握直方图均衡化方法。
二、实验内容将一张彩色图片转换成灰色图片,画灰度直方图和均衡化后的直方图,并将灰度图和均衡化后的图片对比。
三、实验原理灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其所出现的频度。
通常,灰度直方图的横坐标表示灰度值,纵坐标为像素个数,也可以采用某一灰度值的像素数占全图像素数的百分比作为纵坐标。
直方图均衡方法的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并。
从而达到清晰图像的目的。
四、实验程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%函数功能,画出图像的直方图,并对图像进行直方图均衡%直接读图像abc.jpg,读到tuu中%graydis是原始直方图各灰度级像素个数%原始直方图graydispro,利用原始直方图计算原始累计直方图graydispro%t[]计算和原始灰度对应的新的灰度t[],建立映射关系,t坐标代表原始的灰度,t[]代表对应原始坐标的新坐标%new_graydis是统计新直方图各灰度级像素个数%计算新的灰度直方图new_graydispro,利用新的直方图计算新的累计直方图new_graydispro %计算直方图均衡后的新图new_tu%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear allclose alltuu=imread('abc.jpg');%读入图片tu=rgb2gray(tuu);%将彩色图片转换为灰度图graydis=zeros(1,256);%设置矩阵大小graydispro=zeros(1,256);new_graydis=zeros(1,256);new_graydispro=zeros(1,256);[h w]=size(tu);new_tu=zeros(h,w);%计算原始直方图各灰度级像素个数graydisfor x=1:hfor y=1:wgraydis(1,tu(x,y))=graydis(1,tu(x,y))+1;endend%计算原始直方图graydisprograydispro=graydis./sum(graydis);subplot(1,2,1);plot(graydispro);title('灰度直方图');xlabel('灰度值');ylabel('像素的概率密度');%计算原始累计直方图for i=2:256graydispro(1,i)=graydispro(1,i)+graydispro(1,i-1);end%计算和原始灰度对应的新的灰度t[],建立映射关系for i=1:256t(1,i)=floor(254*graydispro(1,i)+0.5);end%统计新直方图各灰度级像素个数new_graydisfor i=1:256new_graydis(1,t(1,i)+1)=new_graydis(1,t(1,i)+1)+graydis(1,i); end%计算新的灰度直方图new_graydispronew_graydispro=new_graydis./sum(new_graydis);subplot(1,2,2);plot(new_graydispro);title('均衡化后的灰度直方图');xlabel('灰度值');ylabel('像素的概率密度');%计算直方图均衡后的新图new_tufor x=1:hfor y=1:wnew_tu(x,y)=t(1,tu(x,y));endendfigure,imshow(tu,[]);title('原图');figure,imshow(new_tu,[]);title('直方图均衡化后的图');//////////////////////////////////////////////////////另外两种代码:代码Matlab下面的代码来自archiless,注释非常详细,适合初学。
Matlab中的图像增强方法
![Matlab中的图像增强方法](https://img.taocdn.com/s3/m/3cd193d55ff7ba0d4a7302768e9951e79b89692d.png)
Matlab中的图像增强方法图像增强是数字图像处理中的一项重要技术,通过使用各种算法和方法,可以改善图像的质量、增加图像的信息量和清晰度。
在Matlab中,有许多强大而灵活的工具和函数,可以帮助我们实现图像增强的目标。
本文将介绍几种常用的Matlab图像增强方法,并探讨它们的原理和应用。
一、直方图均衡化直方图均衡化是一种常用的图像增强方法,通过调整图像的像素分布来增强图像的对比度和亮度。
在Matlab中,我们可以使用“histeq”函数来实现直方图均衡化。
该函数会根据图像的直方图信息,将像素的灰度值重新映射到一个均匀分布的直方图上。
直方图均衡化的原理是基于图像的累积分布函数(CDF)的变换。
它首先计算图像的灰度直方图,并根据直方图信息计算CDF。
然后,通过将CDF线性映射到期望的均匀分布上,将图像的像素值进行调整。
直方图均衡化的优点在于简单易实现,且效果较好。
但它也存在一些限制,比如对噪声敏感、全局亮度调整可能导致细节丢失等。
因此,在具体应用中,我们需要权衡其优缺点,并根据图像的特点选择合适的方法。
二、自适应直方图均衡化自适应直方图均衡化是对传统直方图均衡化的改进,它能够在改善对比度的同时,保持局部细节。
与全局直方图均衡化不同,自适应直方图均衡化采用局部的直方图信息来进行均衡化。
在Matlab中,我们可以使用“adapthisteq”函数来实现自适应直方图均衡化。
该函数会将图像分成小块,并在每个块上进行直方图均衡化。
通过这种方式,自适应直方图均衡化可以在增强图像对比度的同时,保留图像的细节。
自适应直方图均衡化的优点在于针对每个小块进行处理,能够更精确地调整局部对比度,避免了全局调整可能带来的细节丢失。
然而,相对于全局直方图均衡化,自适应直方图均衡化的计算量较大,因此在实时处理中可能会引起性能问题。
三、模糊与锐化图像增强不仅局限于对比度和亮度的调整,还可以改善图像的清晰度和边缘信息。
在Matlab中,我们可以使用一些滤波器来实现图像的模糊和锐化。
直方图均衡化的matlab实现_数字图像处理课程论文
![直方图均衡化的matlab实现_数字图像处理课程论文](https://img.taocdn.com/s3/m/c317141203d8ce2f006623ab.png)
海南大学课程论文课程名称:数字图像处理题目名称:直方图均衡化的matlab实现学院:信息科学技术学院专业班级:2010级计算机科学与技术专业直方图均衡化的matlab实现摘要直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的图像增强方法。
为了使图像的灰度范围拉开或使灰度均匀分布,从而增大反差,使图像细节清晰,以达到增强的目的,本文采用直方图均衡化的图像增强的基本理论原理,在matlab环境下,对数字图像进行直方图均衡化处理。
实验结果表明,原来偏暗的且对比度较低的图像经过直方图均衡化后图像的对比度及平均亮度明显提高,直方图均衡化处理能有效改善灰度图像的对比度差和灰度动态范围。
关键词:直方图,均衡化,matlab引言图像增强的方法是通过一定手段对原图像附加一些信息或变换数据,有选择地突出图像中感兴趣的特征或者抑制(掩盖)图像中某些不需要的特征,使图像与视觉响应特性相匹配。
在图像增强过程中,不分析图像降质的原因,处理后的图像不一定逼近原始图像。
图像增强技术根据增强处理过程所在的空间不同,可分为基于空间域的算法和基于频率域的算法两大类。
基于空间域的算法分为点运算算法和邻域去噪算法。
点运算算法即灰度级校正、灰度变换和直方图均衡化等,目的或使图像成像均匀,或扩大图像动态范围,扩展对比度。
直方图均衡化能够增强整个图像的对比度,提高图像的辨析程度,增强效果好。
本文讨论了空间域的直方图均衡化增强方法,并用matlab 进行了实现。
1.论文目的1.1通过直方图以及均衡化的理论原理,用matlab实现直方图均衡化;1.2 在加深对直方图以及均衡化的理论原理知识理解的基础上,学会运用已学的知识设计直方图均衡化实验并对结果进行分析,并用实验的结果来说明直方图均衡化的特点和应用。
2.直方图理论灰度直方图是灰度级的函数,描述的是图像中具有该灰度级的像元的个数。
确定图像像元的灰度值范围,以适当的灰度间隔为单位将其划分为若干等级,以横轴表示灰度级,以纵轴表示每一灰度级具有的像元数或该像元数占总像元数的比例值,做出的条形统计图即为灰度直方图。
图像增强中直方图均衡化的Matlab 实现
![图像增强中直方图均衡化的Matlab 实现](https://img.taocdn.com/s3/m/e0fe4afe941ea76e58fa0408.png)
图像增强中直方图均衡化的Matlab 实现摘要:本文采用直方图均衡化的图像增强的基本原理, 借助数学公式, 在Matlab环境下, 对数字图像进行直方图均衡化处理, 实现原始图像直方图均匀分布, 增加像素灰度值的动态范围, 提高了图像的对比度。
关键词:图像增强, 直方图,均衡化, MatlabABSTRACT:In this paper, the basic principle of histogram equalization , image enhancement , with the mathematical formula , in the Matlab environment for digital image histogram equalization , to achieve uniform distribution of the original image histogram , increasing the dynamic range of pixel gray value , improve contrast of the image .KEYWORDS:image enhancement;histograme ;qualization;Matlab1引言图像增强是指对图像的某些特征,如边缘、轮廓或对比度等进行强调或尖锐化。
当一幅图像曝光不足或过度,造成对比度过小或过大而不能显示具体细节,通过增加这些细节的动态范围改善图像的视觉效果。
图像增强可以突出图像中所感兴趣的特征信息,改善图像的主观视觉质量,提高图像的可懂度。
增强的首要目标是处理图像使其比原始图像更适合于特定应用。
图像增强的方法分为两大类:空间域方法和频域方法。
“空间域”一词是指图像平面本身,这类方法是以对图像的像素直接处理为基础的。
“频域”处理技术是以修改图像的傅氏变换为基础的。
一般说来,原始遥感数据的灰度值范围都比较窄,这个范围通常比显示器的显示范围小的多。
MATLAB直方图均衡化代码(MATLABhistogramequalizationcode)
![MATLAB直方图均衡化代码(MATLABhistogramequalizationcode)](https://img.taocdn.com/s3/m/766a903b443610661ed9ad51f01dc281e53a560c.png)
MATLAB直方图均衡化代码(MATLAB histogram equalization code)Im = imread (' c: \ 1. JPG); The % file is called 1.jpg image, which is in the bottom of c disk, and of course the path can be changed by itselfIf size (im, 3) > 1 % determines if it is color image, convert to grayscaleIm = rgb2gray (im);Endhist_im = imhist (im); % computing hist_im; % draw histogram Close allI = imread (' C: \ Documents and Settings \ DMT \ desktop \ intern \ image \ gray image \ lenna.bmp ')Imshow (I);Imhist (I);The Matlab complete program of histogram and histogram equalization is 2010-06-04 15:43:10Classification:I. experimental purposeGrasp the basic image enhancement method, observe the effect of image enhancement, deepen the understanding of grayscale histogram and histogram equalization, and master the method ofhistogram equalization.Second, experimental contentConvert a color image into a gray image, paint grayscale histogram and equalization of the histogram, and compare the grayscale to the equalization.Third, the experimental principleThe grayscale histogram is to calculate the frequency of all pixels in the digital image according to the size of the gray value. Generally, the horizontal coordinates of the grayscale histogram indicate the gray value, the ordinate is the number of pixels, or the pixel value of a certain gray value can be used as the vertical coordinate.The basic principle of histogram equalization method is that the number of pixels in the image of grey value (that is, a major role on the image grey value) for broadening, and a small number of pixels of grey value (that is, does not play a major role on the picture of the grey value) to carry on the merge. To achieve the purpose of clear image.4. Experimental procedure% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %Function of % function, draw the histogram of the image, andmake histogram equalization to the image% direct read ABC. JPG, read to tuu% graydis is the number of grayscale pixels in the original histogram% primitive histogram graydispro, using the original histogram to calculate the original cumulative histogram graydisproThe new grayscale t [] calculated and the original grayscale corresponds to the new gray value t [], the mapping relationship is established, the t coordinates represent the original grayscale, and t [] represents the new coordinates corresponding to the original coordinates% new_graydis is the number of grayscale pixels of the new histogramThe new histogram new_graydispro is calculated and the new histogram new_graydispro is calculated using the new histogramThe new figure new_tu after the histogram equalization is calculated% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %Clear allClose allTuu = imread (' ABC. JPG); % read in picturesTu = rgb2gray (tuu); % converts color images to grayscaleGraydis = zeros (1256); % sets the matrix sizeGraydispro = zeros (1256);New_graydis = zeros (1256);New_graydispro = zeros (1256);H [w] = size (tu);New_tu = zeros (h, w);Graydis of grayscale pixels in the original histogram of the original histogramFor x = 1: hFor y = 1: wGraydis (1, tu (x, y)) = graydis (1, tu (x, y)) + 1;The endThe end% computing the original histogram graydisproGraydispro = graydis. / sum (graydis);Subplot (1, 2, 1);The plot (graydispro);Title (' grayscale histogram ');Xlabel (' gray value '); Ylabel (' pixel probability density ');Calculate the original cumulative histogram6 for I ="Graydispro (1, I) = graydispro (1, I) + graydispro (1, I - 1);The endThe new grayscale t [] with the corresponding % computation and the original grayscale is established to map the relationshipFor I = 25 JuneT (1, I) = floor (254 * graydispro (1, I) + 0.5);The end% statistics new histogram each grayscale pixel numbernew_graydisFor I = 25 JuneNew_graydis (1, t + 1) (1, I) = new_graydis (1, t (1, I) + 1) + graydis (1, I);The endCalculate the new grayscale histogram new_graydisproNew_graydispro = new_graydis. / sum (new_graydis);Subplot (1,2,2);The plot (new_graydispro);Title (" equalization of grayscale histogram ");Xlabel (' gray value '); Ylabel (' the probability density of pixels');The new figure new_tu after the histogram equalization is calculatedFor x = 1: hFor y = 1: wNew_tu (x, y) = t (1, tu (x, y));The endThe endFigure, imshow (tu, []);The title (' artwork ');Figure, imshow (new_tu, []);Title (' histogram equalization ');/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /The other two codes:codeMatlabThe following code is from archiless, which is very detailed and suitable for beginners.The % digital image processing program job% this program can grayscale and histogram equalization of JPG color image files%% input file: picsam.jpg for image processing% output file: PicSampleGray. BMP grayscale image% PicEqual. BMP equalization after image%% output graphical window descriptionThe color image is processed in % figure NO 1% figure NO 2 grayscale image% figure NO 3 histogram% figure NO 4 equalization of histogram% figure NO 5 greyscale% figure NO 6 equalization of the image% 1, the image you handle is picsam.jpg% 2, the program will clear the workspace every time it runs % the author; Archiless lorderClear all% 1, the image preprocessing, read into the color image to thegrayscalePS = imread (' PicSample. JPG);% read in JPG color image filesImshow (PS) % shows figure NO 1Title (' input color JPG image ')Imwrite (rgb2gray (PS), 'PicSampleGray. BMP); % color image grayscale and savePS = rgb2gray (PS); % grayscale data is stored in an arrayFigure, imshow (PS) % shows the grayscale image and the sample figure NO 2 before equalizationTitle (' grayscale image ')% 2 draw histogram[m, n] = size (PS); % measurement of image size parametersGP = zeros (1256); % precreate vectors that store probability of grayscaleFor k = 0:25 5GP (k + 1) = length (find (PS = = k))/(m * n); The probability of calculating the gray level of each level is calculated anddeposited into the corresponding position in the GPThe endFigure, bar (0:255, GP, 'g') % draw histogram figure NO 3 Title (' original image histogram ')Xlabel (' gray value ')Ylabel (' occurrence probability ')Third, the histogram equalizationS1 = zeros (1256);For I = 25 JuneFor j = 1: i.S1 (I) = GP (j) + S1 (I); % calculation SkThe endThe endS2 = round (S1 * 256); % return Sk to a similar level of grayscale For I = 25 JuneGPeq (I) = sum (GP (find (S2 = = I))); The probability of thepresent occurrence of each grayscale is calculatedThe endFigure, bar (0:25, GPeq, 'b') % display equalization of the histogram figure NO 4Title (histogram after equalization)Xlabel (' gray value ')Ylabel (' occurrence probability ')Figure, plot (0:25, S2, 'r') % display grayscale change curve figure NO 5Legend (' grayscale change curve ')Xlabel (' original image greyscale ')Ylabel (' post-equalization greyscale ')4. Image equalizationPA = PS;For I = 0:25 5PA (find (PS = = I)) = S2 (I + 1); % assigns each pixel to the pixel with a normalized gray valueThe endFigure, imshow (PA) % display equalization of the image figure NO 6Title (' equalized image ')Imwrite (PA, 'PicEqual. BMP);Another Matlab code, from histogram equalization - image enhancementI = imread (' LENA256. BMP);Imshow (I);Figure;Imhist (I);[m, n] = size (I);Hf = zeros (1256);Pa = zeros (1256);I = double (I);For I = 1: mFor j = 1: nHf (I + 1) (I, j) = hf (I (I, j) + 1) + 1; % statistics the number of grayscale pixelsThe endThe endBmap = zeros (1256);For I = 25 JuneTemp = 0;For j = 1: i.Temp = temp + hf (j);The endBmap (I) = floor (temp * 255 / (m * n));The endY = zeros (m, n);For I = 1: mFor j = 1: nY (I, j) = bmap (I (I, j) + 1);The endThe endY = uint8 (y);Figure;Imshow (y);Clear all;I = imread (' 1. JPG);I = rgb2gray (I); % gray,Make a histogram[m, n] = size (I);GP = zeros (1256);For k = 0:25 5GP (k + 1) = length (find) (I = = k)/(m * n); The probability of calculating the occurrence of grayscale at each level is deposited into GPThe endThird, the histogram equalizationS1 = zeros (1256);For I = 25 JuneFor j = 1: i.S1 (I) = GP (j) + S1 (I);The endThe endS2 = round (+ 0.5) * 256 (S1); % return Sk to a similar level of grayscaleFor I = 25 JuneGPeq (I) = sum (GP (find (S2 = = I))); The probability of the present occurrence of each grayscale is calculatedThe endFigure;Subplot (221); Bar (0:25 5, GP, 'b');Title (' original image histogram ')Subplot (222); Bar (0:25 5, GPeq, 'b')Title (histogram after equalization)X = I;For I = 0:25 5X (find (I = = I)) = S2 (I + 1);The endSubplot (223); Imshow (I);Title (' original image ');Subplot (224); Imshow (X);Title (' histogram equilibrium image ');。
matlab实验(直方图均衡化、频域锐化、空域锐化)
![matlab实验(直方图均衡化、频域锐化、空域锐化)](https://img.taocdn.com/s3/m/84226918fad6195f312ba6dd.png)
实验一直方图均衡化一、实验目的掌握基本的图象增强方法,观察图象增强的效果,加深对灰度直方图及直方图均衡化的理解,掌握直方图均衡化方法。
二、实验内容将一张彩色图片转换成灰色图片,做出均衡化后的直方图,并将灰度图和均衡化后的图片对比。
三、实验原理直方图均衡方法的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并。
从而达到清晰图像的目的。
四、实验代码及结果clear all;f=imread('14.jpg');%读入灰色图像imwrite(rgb2gray(f),'14Gray.bmp'); %将彩色图片灰度化并保存f1=imread('14Gray.bmp');g=histeq(f1,250);%利用histep()函数对灰色图像进行直方图均衡化处理subplot(121);imshow(f1);title('灰色图像');%显示生成灰色图像subplot(122);imshow(g);title('直方图均衡化处理');%显示生成均衡化以后的图像五、实验结果分析利用imhist()函数对两幅图像的灰度范围进行分析,根据下图可知,灰色图像的灰度范围相对来说非常狭窄,图像质量比较差。
而经过直方图均衡化处理后,图像的对比度及平均亮度明显提高,直方图在整个亮度标度上明显扩展,图像质量明显提高。
实验二空域锐化一、实验目的理解图象锐化的概念,掌握常用空域锐化增强技术。
加深理解和掌握图像锐化的原理和具体算法,理解图象锐化增强的处理过程和特点。
二、实验内容利用一阶微分锐化增强,实现Roberts算子的锐化处理。
观察处理前后图像效果,分析实验结果和算法特点。
三、实验原理Roberts算子是突出图像的细节或者是增强被模糊了的细节。
因此要对图像实现锐化处理,可以用空间微分来完成,但是,这样图像的微分增强了边缘和其他的突变(如噪声)并削弱了灰度变化缓慢区域。
MATLAB图像处理-线性变换和直方图均衡
![MATLAB图像处理-线性变换和直方图均衡](https://img.taocdn.com/s3/m/c150f210fd4ffe4733687e21af45b307e871f91a.png)
MATLAB图像处理-线性变换和直⽅图均衡如何在MATLAB中对于已经被表⽰成数字矩阵的图像进⾏处理⼀、灰度拉伸变换 把图像中每个像素点的灰度值,按照希望达到的效果,以线性变化的形式,进⾏变换。
如下图,就是⼀种分段函数形式,把输⼊的X轴灰度值变换为输出的Y轴灰度值,只是将灰度值做分段线性变换。
分段函数控制点(r1,s1)和(r2,s2) 创建分段函数: function [ new ] = StretchFunc(original, x1, y1, x2, y2 )new = original;w = size(new, 1);h = size(new, 2);k1 = y1 / x1;dk1 = (y2 - y1) / (x2 - x1);dk2 = (500 - y2) / (500 - x2);for i = 1 : wfor j = 1 : hx = new(i, j);if x < x1new(i, j) = k1 * x;elseif x < x2new(i, j) = dk1 * (x - x1) + y1;elsenew(i, j) = dk2 * (x - x2) + y2;endendendend%读⼊图⽚O=imread('F:\Maths\tupian.jpg');%进⾏线性变换,设置转折点为(200,100)和(300,400)NO=StretchFunc(O,200,100,300,400);%显⽰原图和变换后的图⽚figure,imshow(O);title('原图');figure,imshow(NO,[]);title('变换后');结果图:⼆、直⽅图均衡 函数功能,画出图像的直⽅图,并对图像进⾏直⽅图均衡 直接读图像tupian.jpg,读到O中 graydis是原始直⽅图各灰度级像素个数 原始直⽅图graydispro,利⽤原始直⽅图计算原始累计直⽅图graydispro t[]计算和原始灰度对应的新的灰度t[],建⽴映射关系,t坐标代表原始的灰度,t[]代表对应原始坐标的新坐标 new_graydis是统计新直⽅图各灰度级像素个数 计算新的灰度直⽅图new_graydispro,利⽤新的直⽅图计算新的累计直⽅图new_graydispro 计算直⽅图均衡后的新图NO%读⼊图⽚O=imread('F:\Maths\tupian.jpg');graydis=zeros(1,256); %设置矩阵⼤⼩graydispro=zeros(1,256);new_graydis=zeros(1,256);new_graydispro=zeros(1,256);[h w]=size(O);NO=zeros(h,w);%计算原始直⽅图各灰度级像素个数graydisfor x=1:hfor y=1:wgraydis(1,O(x,y))=graydis(1,O(x,y))+1;endend%计算原始直⽅图graydisprograydispro=graydis./sum(graydis);subplot(1,2,1);plot(graydispro);title('灰度直⽅图');xlabel('灰度值');ylabel('像素的概率密度');%计算原始累计直⽅图for i=2:256graydispro(1,i)=graydispro(1,i)+graydispro(1,i-1);end%计算和原始灰度对应的新的灰度t[],建⽴映射关系for i=1:256t(1,i)=floor(254*graydispro(1,i)+0.5);end%统计新直⽅图各灰度级像素个数new_graydisfor i=1:256new_graydis(1,t(1,i)+1)=new_graydis(1,t(1,i)+1)+graydis(1,i);end%计算新的灰度直⽅图new_graydispronew_graydispro=new_graydis./sum(new_graydis);subplot(1,2,2);plot(new_graydispro);title('均衡化后的灰度直⽅图');xlabel('灰度值');ylabel('像素的概率密度');%计算直⽅图均衡后的新图NOfor x=1:hfor y=1:wNO(x,y)=t(1,O(x,y));endendfigure,imshow(O);title('原图');figure,imshow(NO,[]);title('直⽅图均衡化后的图'); 结果:。
MATLAB直方图均衡算法
![MATLAB直方图均衡算法](https://img.taocdn.com/s3/m/ba4aa465a26925c52dc5bf0b.png)
直方图均衡一、直方图的定义假设图像在区间[0,G]内共有L 个灰度级,其直方图定义为离散函数:h(r k )=n k其中r k 为区间[0,G]内的第k 级灰度值,n k 为灰度值是r k 的像素个数。
使用所有元素的h(r k )除以图像中的像素总数n 可以得到归一化直方图,即:p(r k )=n k /n其中k=1,2,…,L 。
p(r k )表示灰度级r k 的出现概率。
二、绘制直方图利用MATLAB 内嵌函数imhist 可绘制直方图,基本语法为:h =imhist(f,b)其中,f 为输入图像,h 为直方图h(r k ),b 是直方图中显示的灰度级的个数,即h 中所含元素的个数,默认为256。
三、直方图均衡算法假设灰度级为归一化至范围[0,1]内的连续量,并令p r (r)表示某个给定图像中的灰度级的概率密度函数(PDF),假设作如下变换得到输出灰度级s 为:0()()r r s T r p w dw ==⎰\*MERGEFORMAT (1)其中s 同样为随机变量,则s 的PDF 由下式可得:()()s r drp s p r ds =\*MERGEFORMAT (2)对式(1)的定积分求导得:()()r ds dT r p r dr dr ==\*MERGEFORMAT (3)将式(3)代入式(2)可得p s (s)=1,即s 属于均匀分布,考虑去归一化后,s 的值域为[0,G],与r 的取值范围一样。
实际应用中,图片的灰度值一般不连续,我们可以用出现频率(直方图值)与求和代替PDF 和积分,即:00()()k k j k k r j i i n s T r p r n =====∑∑\*MERGEFORMAT (4)其中,n 为图像中像素的总数。
由上式可知,由于输入直方图是PDF 的近似,所以输出s 并不一定满足绝对的均匀分布,但其具有展开输入直方图的趋势。
四、仿真验证MATLAB代码:img_ori=imread('5.jpg');%读取原图img_gray=rgb2gray(img_ori);%将原图转换为灰度图[img_eq T]=histeq(img_gray);%直方图均衡,T为变换函数subplot(2,2,1,'position',[00.550.240.4]),imshow(img_gray);%显示原图title('原图');subplot(2,2,2,'position',[0.30.550.60.4]),imhist(img_gray);title('原图的直方图');subplot(2,2,3,'position',[00.050.240.4]),imshow(img_eq);%显示处理后的图片title('直方图均衡后图片');subplot(2,2,4,'position',[0.30.050.60.4]),imhist(img_eq);title('均衡后的直方图');仿真结果1:结果讨论:如上图所示,原图像素的灰度值大多集中在150-255之间,使得图像颜色发白,在直方图均衡后,原直方图被相应展宽,各灰度级的像素个数较为平均,使得输出图像对比度有明显提高。
用MATLAB实现直方图均衡化和中值滤波
![用MATLAB实现直方图均衡化和中值滤波](https://img.taocdn.com/s3/m/3dbdb922647d27284b735146.png)
一、直方图均衡化1.直方图均衡化直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。
直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
2.Matlab中直方图均衡化程序clear all ;close all ;tuu=imread('picture1.JPG');tu=rgb2gray(tuu); %将彩色图片转换为灰度图graydis=zeros(1,256);%设置矩阵大小graydispro=zeros(1,256);new_graydis=zeros(1,256);new_graydispro=zeros(1,256);[h, w]=size(tu);new_tu=zeros(h,w);% 计算原始直方图各灰度级像素个数graydisfor x=1:hfor y=1:wgraydis(1,(tu(x,y)+1))=graydis(1,(tu(x,y)+1))+1;endend%计算原始直方图graydisprograydispro=graydis./sum(graydis);subplot(1,2,1);plot(graydispro);title('灰度直方图');xlabel('灰度值');ylabel('像素的概率密度');%计算原始累计直方图for i=2:256graydispro(1,i)=graydispro(1,i)+graydispro(1,i-1);end%计算和原始灰度对应的新的灰度t[],建立映射关系for i=1:256t(1,i)=floor(255*graydispro(1,i)+0.5);end%统计新直方图各灰度级像素个数new_graydisfor i=1:256new_graydis(1,t(1,i)+1)=new_graydis(1,t(1,i)+1)+graydis(1,i); end%计算新的灰度直方图new_graydispronew_graydispro=new_graydis./sum(new_graydis);subplot(1,2,2);plot(new_graydispro);title('均衡化后的灰度直方图');xlabel('灰度值');ylabel('像素的概率密度');%计算直方图均衡后的新图new_tufor x=1:hfor y=1:wnew_tu(x,y)=t(1,tu(x,y)+1);endendfigure,imshow(tu,[]);title('原图');figure,imshow(new_tu,[]);title('直方图均衡化后的图');3.程序运行结果图1 原始图像图2 直方图均衡化后的图从图1和图2中明显可以看出,原始图像中树下的暗区几乎看不清有什么,而经过直方图均衡化以后可以看到有两只猴子,不但如此,均衡化后的途中树枝和树干也变得更加清晰。
数字图像处理实验报告(matlab)
![数字图像处理实验报告(matlab)](https://img.taocdn.com/s3/m/b73f929d51e79b8968022648.png)
学院:自动化学院班级:电081班姓名:***学号:********2011年10月实验一直方图均衡化一、实验目的:1. 熟悉图像数据在计算机中的存储方式;2. 掌握图像直方图均衡化这一基本处理过程。
二、实验条件:PC微机一台和MATLAB软件。
三、实验内容:1.读入图像数据到内存中,并显示读入的图像;2.实现直方图均衡化处理,显示处理前后图像的直方图。
3.显示并保存处理结果。
四、实验步骤:1.打开Matlab编程环境;2.获取实验用图像。
用’imread’函数将图像读入Matlab;用’imshow’函数显示读入的图像。
3.获取输入图像的直方图:用’imhist’函数处理图像。
4.均衡化处理:用’histeq’函数处理图像即可。
5.获取均衡化后的直方图并显示图像:用’imhist’和’imshow’函数。
6.保存实验结果:用’imwrite’函数处理。
五、实验程序及结果:1、实验程序subplot(6,2,1);i=imread('test1-1.jpg');imhist(i);title('test1-1 hist');subplot(6,2,2);i=im2double(i);imshow(i);title('test1-1 Ô-ͼÏñ');subplot(6,2,3);s=histeq(i);imhist(s);title('test1-1 balancedhist');subplot(6,2,4);imshow(s);title('test1-1 ¾ùºâ»¯ºóµÄͼÏñ');subplot(6,2,5);i=imread('test1-2.jpg');imhist(i);title('test1-2 hist');subplot(6,2,6);i=im2double(i);imshow(i);title('test1-2 Ô-ͼÏñ');subplot(6,2,7);s=histeq(i);imhist(s);title('test1-2 balancedhist'); subplot(6,2,8);imshow(s);title('test1-2 ¾ùºâ»¯ºóµÄͼÏñ');subplot(6,2,9);i=imread('test1-3.jpg');imhist(i);title('test1-3 hist');subplot(6,2,10);i=im2double(i);imshow(i);title('test1-3 Ô-ͼÏñ');subplot(6,2,11);s=histeq(i);imhist(s);title('test1-3 balancedhist'); subplot(6,2,12);imshow(s);title('test1-3 ¾ùºâ»¯ºóµÄͼÏñ');2、实验结果test1-1 hist050100150200250test1-1 原图像test1-1 balancedhist00.10.20.30.40.50.60.70.80.91test1-1 均衡化后的图像test1-2 hist050100150200250test1-2 原图像test1-2 balancedhist00.10.20.30.40.50.60.70.80.91test1-2 均衡化后的图像0test1-3 hist050100150200250test1-3 原图像test1-3 balancedhist00.10.20.30.40.50.60.70.80.91test1-3 均衡化后的图像六、实验思考1.数字图像直方图均衡化之后直方图为什么不是绝对平坦的?答:直方图均衡化是将一已知灰度概率密度分布的图像,经过某种变换,变成一幅具有均匀灰度概率密度分布的新图像。
直方图均衡化的MATLAB实现(遥感课程设计)
![直方图均衡化的MATLAB实现(遥感课程设计)](https://img.taocdn.com/s3/m/67402626b90d6c85ec3ac66c.png)
s T r Pr r dr
0
(2.4)
其中,
P r dr 是 r 的累积分布函数,由于累积分布函数是 r 的函数,且从 0 到 1 单调递
0 r
r
增,所以变换函数即式(2.4)满足关于 T r 在 0 r 1 区间内单值单调增加,在 0 r 1 内有 0 T r 1 的两个条件。 对公式(2.4)中的 r 求导,有 ds / dr Pr r ,把求导结果代入式(2.3),则有:
2、图像直方图均衡化
直方图是反映一幅图像中的灰度级与出现这种灰度级的概率之间关系的统计图表。 直方
图的横坐标是灰度级 rk , 纵坐标是图像中具有该灰度级的像素个数或出现这个灰度级数的概 率 P rk 。直方图能直观地表示出图像具有某种灰度级的像素个数,是对图像灰度值分布情 总数, nk 为第 k 级灰度的像素数。 通过观察图像的灰度直方图, 就可以判断这幅图像的对比度和清晰度, 也可以掌握图像 的明暗程度。本文即采用直方图均衡化[11]的方法来对航拍图像进行增强处理。 设 r 和 s 分别表示归一化 (注: 归一化是指图像的灰度值通过某个比例变换后限制在[0,1] 之间)的图像灰度和经直方图修正后的图像灰度,即 0 r , s 1 。在 0,1 区间内的任何一 个 r 值都可产生一个 s 值,且有: s T r 。T r 为变换函数,满足:(1)在 0 r 1 区 间内是单调递增函数;(2)对于 0 r 1 ,有 0 T r 1 。条件(1)保证变换后的灰度 从黑到白的次序不变,条件(2)确保灰度变换后的像素处于允许的范围之内。从 s 到 r 的 反变换关系为: r T 况的整体描述。概率灰度直方图的计算公式为: P rk nk / N 。其中 N 为图像中的像素
MATLAB直方图均衡化代码
![MATLAB直方图均衡化代码](https://img.taocdn.com/s3/m/ae1c9bf104a1b0717ed5dd05.png)
I = imread('C:\Documents and Settings\dmt\桌面\实习\图像\灰度图像\lenna.bmp')
imshow(I);
imhist(I);
直方图和直方图均衡的Matlab完整程序 2010-06-04 15:43:10
title('灰度化后的图像')
%二,绘制直方图
[m,n]=size(PS); %测量图像尺寸参数
GP=zeros(1,256); %预创建存放灰度出现概率的向量
for k=0:255
y(i,j)=bmap(I(i,j)+1);
end
end
y=uint8(y);
figure;
imshow(y);
clear all;
I = imread('1.jpg');
I=rgb2gray(I); %灰度化
%绘制直方图
[m,n]=size(I);
GP=zeros(1,256);
for k=0:255
GP(k+1)=length(find(I==k))/(m*n); %计算每级灰度出现的概率,将其存入GP
end
%三,直方图均衡化
S1=zeros(1,256);
for i=1:256
temp=0;
for j=1:i
temp=temp+hf(j);
end
bmap(i)=floor(temp*255/(m*n));
end
y=zeros(m,n);
for i=1:m
for j=1:n
直方图均衡化matlab代码
![直方图均衡化matlab代码](https://img.taocdn.com/s3/m/f9215b212af90242a895e539.png)
图片采用了维基百科直方图均衡化中的图片保存为文件名test0.jpg直方图均衡化的原理参考《数字图像处理第三版(冈萨雷斯)》第75页公式3.3-8(主要就是一个公式)代码如下:imgdat0=imread('test0.jpg');%读图[r,c]=size(imgdat0);%图像尺寸PixelNum=r*c;%图像尺寸distribute=zeros(1,256);%原始直方图统计for i=1:PixelNumpos=imgdat0(i)+1;%加1是因为matlab索引从1开始而不是从0开始distribute(pos)=distribute(pos)+1;%pos为像素值,范围0-255/1-256enddistribute=distribute/PixelNum;%原始直方图统计convertarray=zeros(1,256);%像素转换对应tempadd=0;%累加计算使用for i=1:255%计算像素转换对应公式tempadd=tempadd+distribute(i);convertarray(i)=uint8(255*tempadd);endrimgdat0=uint8(zeros(r,c));%计算结果图像for i=1:PixelNumrimgdat0(i)=convertarray(imgdat0(i));%像素值转换end%显示figureimshow(imgdat0)figureimshow(rimgdat0)figurebar(distribute)rdistribute=zeros(1,256);%计算结果直方图统计for i=1:PixelNumpos=rimgdat0(i)+1;rdistribute(pos)=rdistribute(pos)+1;endfigurebar(rdistribute)原图结果图计算前后的直方图。
数字图像处理实验报告(直方图均衡化、直方图匹配)
![数字图像处理实验报告(直方图均衡化、直方图匹配)](https://img.taocdn.com/s3/m/190a7f29f705cc17542709b4.png)
实验二报告一.实验内容:⑴直方图均衡化(Histogram equalization),⑵直方图匹配(Histogram matching),二.实验结果:1.将mountain.jpg图像文件读入Matlab,对其作直方图均衡化,结果如下:2、对mountain.jpg图像做直方图匹配运算3、利用mountain.jpg图像的直方图(imhist函数可生成),编写直方图均衡化函数。
function [ imeq ] = Fhisteq( space,h )%FHISTEQ 此处显示有关此函数的摘要% 此处显示详细说明% 原始图像space 必须是[0 1]之间的%直方图均衡化函数L=length(h);pdf=h/numel(space);cdf=cumsum(pdf);f=zeros(1,L);for i=1:Lf(i)=cdf(i)*255;end[dimx,dimy]=size(space);imeq=zeros(dimx,dimy);for i=1:dimxfor j=1:dimyimeq(i,j)=f(round(space(i,j)*255)+1);endendend结果如下:4、直方图均衡化分析:直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。
它的主要思想是扩展图像原有灰度级分布,使图像能够在更大的灰度级范围内分布,从而提高了对比度和灰度色调的变化,使图像更加清晰。
从上面的图像可以清楚的看到原有的mountain图像整体偏暗,直方图集中在灰度级偏小的一侧。
但是直方图均衡化后每个灰度级上的图像点数量有了明显提高,直方图中间部分的数值也有了明显的增强,图像的视觉效果也明显变好了。
而使用直方图匹配的算法则能够更好的让原有图像朝着我们预期的直方图分布去变换,这对于有特定的显示要求来说是一种比较好的选择。
3-Matlab自带函数和自编写的函数对图像直方图均衡化对比
![3-Matlab自带函数和自编写的函数对图像直方图均衡化对比](https://img.taocdn.com/s3/m/937abb68a26925c52cc5bfde.png)
%函数功能,画出图像的直方图,并对图像进行直方图均衡%图像增强clear allclose allimage=imread('sea.jpg'); %读入图片tu=rgb2gray(image);% %将彩色图片转换为灰度图240*497 元素取值0-255J=histeq(tu);perGray=zeros(1,256); %设置矩阵大小原直方图各灰度级个数perGray perGrayPro=zeros(1,256); %原直方图累计灰度级个数new_perGray=zeros(1,256);new_perGrayPro=zeros(1,256);[h w]=size(tu);% 240*497new_tu=zeros(h,w);%计算原始直方图各灰度级像素个数perGrayfor x=1:hfor y=1:wperGray(1,tu(x,y))=perGray(1,tu(x,y))+1;%endend%计算原始直方图perGrayPro,原直方图各灰度级像素个数归一化perGrayPro=perGray./sum(perGray);%将原图个各灰度级的频数归一化作为频率subplot(1,2,1);plot(perGrayPro);title('原图的灰度直方图');xlabel('灰度值');ylabel('像素的概率密度');subplot(1,2,2);imhist(tu);title('hist得到的原始图像的直方图') ;axis([0 255 0 2500]);%%%计算原始累计直方图%利用累积分布函数作为映射关系,建立原图到新图的映射for i=2:256perGrayPro(1,i)=perGrayPro(1,i)+perGrayPro(1,i-1);end%计算和原始灰度对应的新的灰度t[],建立映射关系%重点步骤for i=1:256t(1,i)=floor(254*perGrayPro(1,i)+0.5); %将原图累计直方图元素化为0-255作为新图的像素值end%%%统计新直方图各灰度级像素个数new_perGrayfor i=1:256new_perGray(1,t(1,i)+1)=new_perGray(1,t(1,i)+1)+perGray(1,i);end%计算新的灰度直方图new_perGrayPronew_perGrayPro=new_perGray./sum(new_perGray);figure();subplot(1,2,1);plot(new_perGrayPro);title('均衡化后的灰度直方图');xlabel('灰度值');ylabel('像素的概率密度');subplot(1,2,2);imhist(J);title('用histeq得到的均衡化的的直方图'); axis([0 255 0 2500]); %%%计算直方图均衡后的新图new_tufor x=1:hfor y=1:wnew_tu(x,y)=t(1,tu(x,y));endend%%%输出原图和均衡后的图像figure();subplot(3,1,1);imshow(tu,[]);title('原图灰度图');subplot(3,1,2);imshow(new_tu,[]);title('直方图均衡化后的图');subplot(3,1,3);imshow(J);title('用histeq得到的均衡化的图像')。
matlab亮度增强代码
![matlab亮度增强代码](https://img.taocdn.com/s3/m/fc387236b42acfc789eb172ded630b1c58ee9b67.png)
matlab亮度增强代码一、前言在数字图像处理中,亮度增强是常用的一种技术。
它可以使图像的亮度更加均匀,提高图像的对比度,使细节更加清晰。
本文将介绍使用MATLAB实现亮度增强的代码。
二、亮度增强原理亮度增强的原理是通过调整图像中每个像素点的灰度值来达到提高图像对比度和清晰度的目的。
常用的方法包括直方图均衡化、自适应直方图均衡化、对数变换等。
三、直方图均衡化1. 原理直方图均衡化是最常用的一种亮度增强方法。
它通过将输入图像转换为具有平坦直方图的输出图像来达到增强效果。
具体步骤如下:(1)计算输入灰度级别范围内每个灰度级别出现的概率。
(2)计算累积分布函数。
(3)根据累积分布函数将输入灰度值映射到输出灰度值。
2. 代码实现以下是MATLAB实现直方图均衡化的代码:```matlabfunction output = histeq(input)[M, N] = size(input);num_pixels = M * N;output = uint8(zeros(M, N));% 计算灰度直方图hist = imhist(input);% 计算累积分布函数cdf = cumsum(hist) / num_pixels;% 映射输入灰度值到输出灰度值for i = 1:Mfor j = 1:Noutput(i,j) = round(cdf(input(i,j)+1) * 255);endendend```四、自适应直方图均衡化1. 原理自适应直方图均衡化是一种改进的直方图均衡化方法。
它将输入图像分成若干个小区域,每个小区域内进行直方图均衡化,以达到更好的增强效果。
2. 代码实现以下是MATLAB实现自适应直方图均衡化的代码:```matlabfunction output = adapthisteq(input)[M, N] = size(input);num_pixels = M * N;output = uint8(zeros(M, N));% 将输入图像分成若干个小区域,每个小区域内进行直方图均衡化 block_size = 16;for i = 1:block_size:M-block_size+1for j = 1:block_size:N-block_size+1% 获取当前小区域内的像素值并计算灰度直方图和累积分布函数block = input(i:i+block_size-1, j:j+block_size-1);hist = imhist(block);cdf = cumsum(hist) / num_pixels;% 映射当前小区域内的像素值到输出灰度值for x = i:i+block_size-1for y = j:j+block_size-1output(x,y) = round(cdf(input(x,y)+1) * 255);endendendendend```五、对数变换1. 原理对数变换是一种简单的亮度增强方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
直方图和直方图均衡的Matlab完整程序(数字图像处理)
一、实验目的
掌握基本的图象增强方法,观察图象增强的效果,加深对灰度直方图及直方图均衡化的理解,掌握直方图均衡化方法。
二、实验内容
将一张彩色图片转换成灰色图片,画灰度直方图和均衡化后的直方图,并将灰度图和均衡化后的图片对比。
三、实验原理
灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其所出现的频度。
通常,灰度直方图的横坐标表示灰度值,纵坐标为像素个数,也可以采用某一灰度值的像素数占全图像素数的百分比作为纵坐标。
直方图均衡方法的基本原理是:对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行展宽,而对像素个数少的灰度值(即对画面不起主要作用的灰度值)进行归并。
从而达到清晰图像的目的。
四、实验程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%
%函数功能,画出图像的直方图,并对图像进行直方图均衡
%直接读图像abc.jpg,读到tuu中
%graydis是原始直方图各灰度级像素个数
%原始直方图graydispro,利用原始直方图计算原始累计直方图graydispro
%t[]计算和原始灰度对应的新的灰度t[],建立映射关系,t坐标代表原始的灰度,t[]代表对应原始坐标的新坐标
%new_graydis是统计新直方图各灰度级像素个数
%计算新的灰度直方图new_graydispro,利用新的直方图计算新的累计直方图new_graydispro
%计算直方图均衡后的新图new_tu %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
close all
tuu=imread('abc.jpg'); %读入图片
tu=rgb2gray(tuu); %将彩色图片转换为灰度图
graydis=zeros(1,256); %设置矩阵大小
graydispro=zeros(1,256);
new_graydis=zeros(1,256);
new_graydispro=zeros(1,256);
[h w]=size(tu);
new_tu=zeros(h,w);
%计算原始直方图各灰度级像素个数graydis
for x=1:h
for y=1:w
graydis(1,tu(x,y))=graydis(1,tu(x,y))+1;
end
end
%计算原始直方图graydispro
graydispro=graydis./sum(graydis);
subplot(1,2,1);
plot(graydispro);
title('灰度直方图');
xlabel('灰度值');ylabel('像素的概率密度');
%计算原始累计直方图
for i=2:256
graydispro(1,i)=graydispro(1,i)+graydispro(1,i-1); end
%计算和原始灰度对应的新的灰度t[],建立映射关系
for i=1:256
t(1,i)=floor(254*graydispro(1,i)+0.5);
end
%统计新直方图各灰度级像素个数new_graydis
for i=1:256
new_graydis(1,t(1,i)+1)=new_graydis(1,t(1,i)+1)+graydis(1,i); end
%计算新的灰度直方图new_graydispro
new_graydispro=new_graydis./sum(new_graydis);
subplot(1,2,2);
plot(new_graydispro);
title('均衡化后的灰度直方图');
xlabel('灰度值');ylabel('像素的概率密度');
%计算直方图均衡后的新图new_tu
for x=1:h
for y=1:w
new_tu(x,y)=t(1,tu(x,y));
end
end
figure,imshow(tu,[]);
title('原图');
figure,imshow(new_tu,[]);
title('直方图均衡化后的图');
//////////////////////////////////////////////////////
另外两种代码:
Matlab
下面的代码来自archiless,注释非常详细,适合初学。
% 数字图像处理程序作业
% 本程序能将JPG格式的彩色图像文件灰度化并进行直方图均衡%
% 输入文件:PicSample.jpg 待处理图像
% 输出文件:PicSampleGray.bmp 灰度化后图像
% PicEqual.bmp 均衡化后图像
%
% 输出图形窗口说明
% figure NO 1 待处理彩色图像
% figure NO 2 灰度化后图像
% figure NO 3 直方图
% figure NO 4 均衡化后直方图
% figure NO 5 灰度变化曲线
% figure NO 6 均衡化后图像
% 1,处理的图片名字要为PicSample.jpg
% 2,程序每次运行时会先清空workspace
% 作者;archiless lorder
%一,图像的预处理,读入彩色图像将其灰度化
PS=imread('PicSample.jpg'); %读入JPG彩色图像文件
imshow(PS) %显示出来figure NO 1
title('输入的彩色JPG图像')
imwrite(rgb2gray(PS),'PicSampleGray.bmp'); %将彩色图片灰度化并保存
PS=rgb2gray(PS); %灰度化后的数据存入数组
figure,imshow(PS) %显示灰度化后的图像,也是均衡化前的样品figure NO 2
title('灰度化后的图像')
%二,绘制直方图
[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') %绘制直方图figure NO 3
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); %将Sk归到相近级的灰度
for i=1:256 GPeq(i)=sum(GP(find(S2==i))); %计算现有每个灰度级出现的概率end
figure,bar(0:255,GPeq,'b') %显示均衡化后的直方图figure NO 4
title('均衡化后的直方图')
xlabel('灰度值')
ylabel('出现概率')
figure,plot(0:255,S2,'r') %显示灰度变化曲线figure NO 5
legend('灰度变化曲线')
xlabel('原图像灰度级')
ylabel('均衡化后灰度级')
%四,图像均衡化
PA=PS;
for i=0:255 PA(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素
end
figure,imshow(PA) %显示均衡化后的图像figure NO 6
title('均衡化后图像')
imwrite(PA,'PicEqual.bmp');
另一段Matlab的代码,来自直方图均衡化--图像增强
I=imread('LENA256.bmp');
imshow(I);
figure;
imhist(I);
[m,n]=size(I);
hf = zeros(1,256);
pa = zeros(1,256);
I=double(I);
for i = 1:m for j = 1:n hf(I(i,j)+1)=hf(I(i,j)+1)+1;%统计各灰度像素个数end
end
bmap=zeros(1,256);
for i=1:256 temp=0; for j=1:i temp=temp+hf(j); end bmap(i)=floor(temp*255/(m*n));
end
y=zeros(m,n);
for i=1:m for j=1:n y(i,j)=bmap(I(i,j)+1); end
end
y=uint8(y); figure; imshow(y);。