实验-数字图像的直方图统计

合集下载

数字图像直方图

数字图像直方图
3.分层结构 由原始图像开始依次构成像素数愈来愈少
的图像,就能使数据表示具有分层性,其代表 有锥形(金字塔)结构。
2.6图像的数据结构与特征
锥形结构是对2k×2k个像素形成的图像,看成 是分辨率(20×20→2k×2k,但20×20不具有反映 输入图像二维构造的信息)不同的k+1幅图像的 层次集合。如图所示,从输入图像I0开始,顺 序产生像素数纵横都变为1/2的一个一个的图 像I1,I2,…Ik。此时,作为图像Ii的各像素的 值,就是它前一个图像Ii-1的相应的2×2像素 的平均值(一般采用平均值,但也可以采用能 表示2×2像素的性质的某个值)。
4. 计算图像信息量H(熵)
L1
H Pi log2 Pi
i0
Pi是图像灰度级为i的像素出现的频率,图像的灰度范 围在[0,L-1]。
彩色图的灰度直方图
灰度图的灰度直方图
灰度图具有二峰性
具有二峰性的灰度图的2值化
2.5 图像处理算法的形式
一. 图像处理基本功能的形式 按图像处理的输出形式,图像处理的基本功能可

在彩色图像(红、绿、兰)或同一对象用
多个不同的波长拍摄的多波段图像中,每个像
素包含着多个图像的信息。这类图像数据的处
理,以多谱图像为例,有下列三种存储方式:
①逐波段存储,分波段处理时采用;
②逐行存储,行扫描记录设备采用;
③逐像素存储,用于分类。
2.6图像的数据结构与特征
2.6.2 图像的特征 1.图像的特征
2.6图像的数据结构与特征
③线和角点特征
城市区划图中有建筑群、街道、公路、铁路、 桥梁等,这些地物可用线、线相交的角点来表 示。从图中提出这些特征,不仅可压缩图像, 也可用于识别。角点代表的局部结构关系不因 视角而改变,在图像匹配中很有用。

数字图像处理实验报告

数字图像处理实验报告

目录实验一:数字图像的基本处理操作 (4):实验目的 (4):实验任务和要求 (4):实验步骤和结果 (5):结果分析 (8)实验二:图像的灰度变换和直方图变换 (9):实验目的 (9):实验任务和要求 (9):实验步骤和结果 (9):结果分析 (13)实验三:图像的平滑处理 (14):实验目的 (14):实验任务和要求 (14):实验步骤和结果 (14):结果分析 (18)实验四:图像的锐化处理 (19):实验目的 (19):实验任务和要求 (19):实验步骤和结果 (19):结果分析 (21)实验一:数字图像的基本处理操作:实验目的1、熟悉并掌握MATLAB、PHOTOSHOP等工具的使用;2、实现图像的读取、显示、代数运算和简单变换。

3、熟悉及掌握图像的傅里叶变换原理及性质,实现图像的傅里叶变换。

:实验任务和要求1.读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。

2.对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分别显示,注上文字标题。

3.对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。

4.对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的对应关系。

:实验步骤和结果1.对实验任务1的实现代码如下:a=imread('d:\');i=rgb2gray(a);I=im2bw(a,;subplot(1,3,1);imshow(a);title('原图像');subplot(1,3,2);imshow(i);title('灰度图像');subplot(1,3,3);imshow(I);title('二值图像');subplot(1,3,1);imshow(a);title('原图像');结果如图所示:图原图及其灰度图像,二值图像2.对实验任务2的实现代码如下:a=imread('d:\');A=imresize(a,[800 800]);b=imread('d:\');B=imresize(b,[800 800]);Z1=imadd(A,B);Z2=imsubtract(A,B);Z3=immultiply(A,B);Z4=imdivide(A,B);subplot(3,2,1);imshow(A);title('原图像 A'); subplot(3,2,2);imshow(B);title('原图像 B'); subplot(3,2,3);imshow(Z1);title('加法图像'); subplot(3,2,4);imshow(Z2);title('减法图像'); subplot(3,2,5);imshow(Z3);title('乘法图像'); subplot(3,2,6);imshow(Z2);title('除法图像');结果如图所示:3.对实验任务3的实现代码如下:s=imread('d:\');i=rgb2gray(s);i=double(i);j=fft2(i);k=fftshift(j); %直流分量移到频谱中心I=log(abs(k)); %对数变换m=fftshift(j); %直流分量移到频谱中心RR=real(m); %取傅里叶变换的实部II=imag(m); %取傅里叶变换的虚部A=sqrt(RR.^2+II.^2);A=(A-min(min(A)))/(max(max(A)))*255;b=circshift(s,[800 450]);b=rgb2gray(b);b=double(b);c=fft2(b);e=fftshift(c);I=log(abs(e));f=fftshift(c);WW=real(f);ZZ=imag(f);B=sqrt(WW.^2+ZZ.^2);B=(B-min(min(B)))/(max(max(B)))*255;subplot(2,2,1);imshow(s);title('原图像');subplot(2,2,2);imshow(uint8(b));title('平移图像');subplot(2,2,3);imshow(A);title('离散傅里叶变换频谱');subplot(2,2,4);imshow(B);title('平移图像离散傅里叶变换频谱');结果如图所示:4.对实验任务4的实现代码如下:s=imread('d:\');i=rgb2gray(s);i=double(i);j=fft2(i);k=fftshift(j);I=log(abs(k));m=fftshift(j);RR=real(m);II=imag(m);A=sqrt(RR.^2+II.^2);A=(A-min(min(A)))/(max(max(A)))*255;b=imrotate(s,-90);b=rgb2gray(b);b=double(b);c=fft2(b);e=fftshift(c);I=log(abs(e));f=fftshift(c);WW=real(f);ZZ=imag(f);B=sqrt(WW.^2+ZZ.^2);B=(B-min(min(B)))/(max(max(B)))*255;subplot(2,2,1);imshow(s);title('原图像');subplot(2,2,2);imshow(uint8(b));title('平移图像');subplot(2,2,3);imshow(A);title('离散傅里叶频谱');subplot(2,2,4);imshow(B);title('平移图像离散傅里叶频谱');结果如图所示::结果分析对MATLAB软件的操作开始时不太熟悉,许多语法和函数都不会使用,写出程序后,调试运行,最开始无法显示图像,检查原因,是有些标点符号没有在英文状态下输入和一些其他的细节,学会了imread(),imshow(),rgb2gray()等函数。

数字图像处理(直方图).

数字图像处理(直方图).

21
其他类型的统计图
• 误差条:errorbar x = 1:10; y = sin(x); e = std(y)*ones(size(x)); errorbar(x,y,e)
22
其他类型的统计图
• 针状图:stem x = 1:60; y = sin(x/4); stem(x,y,'markerFace','b');
explode
17
环形饼图
ph = pie([2 4 3 5],{'North','South','East','West'}); hold on; z = 0.6*exp(i*linspace(0,pi*2,100)); fill(real(z),imag(z), 0.8*[1,1,1]);
18
二阶导数:
f m, n 1 f m, n 1 2 f m, n f x m, n , 2 x
[1 -2 1]
算子(Operator)
31
点操作
Y = F (X)
32
大局域操作
JP i, j G G IP i, j
38
for k = 1:1000
a(k) = a(k-1)+1; end 并行结构:a = [1:1000]+1;
6.递归过程
an = F(an-1) 计算过程中存在着相似的 部分,这里以阶乘为例 给出递归程序。
function y = fractorial(n); % 递归过程 if n==0; y=1; else y=fractorial(n-1)*n; end

数字图像直方图统计报告

数字图像直方图统计报告

一、学习情况
灰度直方图均衡化进行数字图像处理的基本原理
01
直方图均衡化:利用这一特性对图像中像素个数多的灰度 级进行展宽,而对图像中像素个数少的灰度进行压缩,从
而提高了对比度和灰度色调的变化,使图像更加清晰。
实现步骤: (1) 根据输入的灰度图像计算其原始直方图 (2) 对输入的原始直方图进行累加,计算其cdf (3) 使用累计分布函数的线性插值计算新的灰度值
一、学习情况
Matlab仿真
02
Imhist():直接显示图像的灰度直方图
均衡化: (1) 根据输入的灰度图像计算其原始直方图 (2) 对输入的原始直方图进行累加,计算其cdf (3) 使用累计分布函数的线性插值计算新的灰度值
二、已完成的工作及仿
真结果
二、已完成的工作及仿真结果 1 MATLAB仿真
阈值为100 200
阈值为120 200
阈值为140 180
阈值为150 170
由思考题得出的结论
阈值选择在波谷时,图片黑白分化更加明 显,对比度有所增强,当阈值靠近波峰时, 丢失信息过多,图片失真较为严重。
仿真1 MATLAB仿真
2 修改程序课后题的完成结果
双峰阈值分割法
在一些简单的图像中,物体的灰度分布比较有 规律,背景与各个目标在图像的直方图各自形 成一个波峰(区域与波峰一一对应),每两个 波峰之间会形成一个波谷,选择此波谷作为阈 值。
阈值为60 200
阈值为80 200
数字图像直方图均衡化增强实验 中期汇报
组员:张三
一、学习情况
一、学习情况
灰度直方图均衡化进行数字图像处理的基本原理
01
灰度直方图:横坐标是灰度级别,纵坐标是图像中该灰 度值的出现频率,是一个统计结果。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告⼆○⼀⼋~⼆○⼀九学年第⼀学期信息科学与⼯程学院课程设计报告书课程名称:数字图像处理班级:学号:姓名:指导教师:⼆○⼀⼋年⼗⼆⽉⼀、课程设计⽬的:1. 掌握读、写、显⽰图像的基本⽅法。

2. 掌握图像直⽅图的概念、计算⽅法以及直⽅图归⼀化、均衡化⽅法。

3. 掌握图像灰度变换的基本⽅法,理解灰度变换对图像外观的改善效果。

⼆、课程设计内容及要求:1. 读⼊⼀幅图像,判断其是否为灰度图像,如果不是灰度图像,将其转化为灰度图像。

2. 完成灰度图像的直⽅图计算、直⽅图归⼀化、直⽅图均衡化等操作。

3. 完成灰度图像的灰度变换操作,如线性变换、伽马变换、阈值变换(⼆值化)等,分别使⽤不同参数观察灰度变换效果(对灰度直⽅图的影响)。

三、详细设计步骤:1、所使⽤的图像⽂件都保存在Matlab 安装⽬\toolbox\images\imdemos⼦⽬录下。

2、图像的读、写、显⽰操作。

运⽤Matlab 图像处理⼯具箱中的imread函数分别读⼊灰度图像pout.tif、⼆值图像blobs.png 和RGB 图像peppers.png,观察相应的图像矩阵,并运⽤imshow 函数显⽰相应图像。

3、对⼀个RGB 彩⾊图像peppers.png,分别抽取其R、G、B 三个分量层,并显⽰各层图像。

1、以灰度图像pout.tif 为例,运⽤灰度变换法实现图像增强。

2、运⽤Matlab 编程实现灰度直⽅图的统计以及直⽅图均衡化处理过程:(1)计算并绘制原始图像的灰度直⽅图;(2)根据离散累计分布函数,对原始灰度直⽅图进⾏均衡化处理,绘制均衡化后的灰度直⽅图;(3)⽣成均衡化处理后的新图像,显⽰并保存。

(4)⽐较原始图像和新图像的对⽐度。

(1)利⽤Matlab 函数IMNOISE(),在原图上分别叠加⾼斯噪声和椒盐噪声(2)实现均值滤波和中值滤波的功能,去除噪声;(3)调整窗⼝⼤⼩,采⽤对⽐均值滤波中值滤波的性能;1、以灰度图像rice.png 为例,实现Roberts 算⼦、Sobel 算⼦、Prewitt算⼦对其进⾏边缘检测,并实现根据梯度⽣成 5 种不同的增强图像。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告光信13-2班2013210191韩照夏数字图像处理实验报告实验一数字图像空间域平滑一、实验目的掌握图像空间域平滑的原理和程序设计;观察对图像进行平滑增强的效果。

二、实验设备计算机,Matlab程序平台。

三、实验原理图像平滑处理的目的是改善图像质量和抽出对象特征。

任何一幅未经处理的原始图像,都存在着一定程度的噪声干扰。

噪声恶化了图像质量,使图像模糊,甚至淹没特征,给分析带来困难。

消除图像噪声的工作称为图像平滑或滤波。

针对不同噪声源(如光栅扫描、底片颗粒、机械元件、信道传输等)引起的不同种类噪声(如加性噪声、乘性噪声、量化噪声等),平滑方法也不同。

平滑可以在空间域进行,也可以在频率域进行。

1.局部平均法局部平滑法是一种直接在空间域上进行平滑处理的技术。

假设图像由许多灰度恒定的小块组成,相邻象素间存在很高的空间相关性,而噪声则是统计独立的。

因此,可用邻域内各象素的灰度平均值代替该象素原来的灰度值,实现图像的平滑。

对图像采用3×3的邻域平均法,其作用相当于用以下模板与图像进行卷积运算。

2. 超限象素平滑法 对邻域平均法稍加改进,可导出超限象素平滑法。

其原理是将f(x,y)和邻域平均g(x,y)差的绝对值与选定的阈值进行比较,根据比较结果决定点(x,y )的最后灰度g ´(x,y)。

其表达式为3. 二维中值滤波中值滤波就是用一个奇数点的移动窗口, 将窗口中心点的值用窗口内各点的中值代替。

二维中值滤波可由下式表示常用的窗口有:四、实验步骤1.实验准备:打开计算机,进入Matlab 程序界面。

2.输入图像空间域平滑处理程序,程序如下:⎩⎨⎧>-= ),(),(),( ),,(),('其他,当y x f T y x g y x f y x g y x g )},({),(y x f Med y x g A=程序1.1 图像平滑处理clear;clc;I=imread('lena.jpg');subplot(3,2,1);imshow(I);title('原图像');I1=imnoise(I,'salt & pepper',0.02);subplot(3,2,2);imshow(I1);title('对I加椒盐噪声的图像');h2=fspecial('average',[3 3]);I2=imfilter(I1,h2,'replicate');subplot(3,2,3);imshow(I2);title('3×3邻域平滑');h3=fspecial('average',[5 5]);I3=imfilter(I1,h3,'replicate');subplot(3,2,4);imshow(I3);title('5×5邻域平滑');I4=I1;I4((abs(I1-I2))>64)=I2((abs(I1-I2))>64);subplot(3,2,5);imshow(I4);title('3×3超限象素平滑(T=64)'); I5=I1;I5((abs(I1-I3))>48)=I3((abs(I1-I3))>48);subplot(3,2,6);imshow(I5);title('5×5超限象素平滑(T=48)');程序1.2 图像平均平滑与中值滤波clear;clc;I=imread('lena.jpg');subplot(3,3,1);imshow(I);title('原图像');I1=imnoise(I,'gaussian',0.02);subplot(3,3,2);imshow(I1);title('高斯噪声');I2=imnoise(I,'salt & pepper',0.02);subplot(3,3,3);imshow(I1);title('椒盐噪声');h1=fspecial('average',[3 3]);I3=imfilter(I1,h1,'replicate');subplot(3,3,4);imshow(I3);title('对I1 3×3邻域平滑');h2=fspecial('average',[3 3]);I4=imfilter(I2,h2,'replicate');subplot(3,3,5);imshow(I4);title('对I2 3×3邻域平滑');I5=medfilt2(I1,[5 5]);subplot(3,3,6);imshow(I5);title('对I1 5×5中值滤波');I6=medfilt2(I2,[5 5]);subplot(3,3,7);imshow(I6);title('对I2 5×5中值滤波');3.运行图像处理程序,并保存处理结果图像。

数字图像处理图像变换实验报告

数字图像处理图像变换实验报告

实验报告实验名称:图像处理姓名:刘强班级:电信1102学号:1404110128实验一图像变换实验——图像点运算、几何变换及正交变换一、实验条件PC机数字图像处理实验教学软件大量样图二、实验目的1、学习使用“数字图像处理实验教学软件系统”,能够进行图像处理方面的简单操作;2、熟悉图像点运算、几何变换及正交变换的基本原理,了解编程实现的具体步骤;3、观察图像的灰度直方图,明确直方图的作用与意义;4、观察图像点运算与几何变换的结果,比较不同参数条件下的变换效果;5、观察图像正交变换的结果,明确图像的空间频率分布情况。

三、实验原理1、图像灰度直方图、点运算与几何变换的基本原理及编程实现步骤图像灰度直方图就是数字图像处理中一个最简单、最有用的工具,它描述了一幅图像的灰度分布情况,为图像的相关处理操作提供了基本信息。

图像点运算就是一种简单而重要的处理技术,它能让用户改变图像数据占据的灰度范围。

点运算可以瞧作就是“从象素到象素”的复制操作,而这种复制操作就是通过灰度变换函数实现的。

如果输入图像为A(x,y),输出图像为B(x,y),则点运算可以表示为:B(x,y)=f[A(x,y)]其中f(x)被称为灰度变换(Gray Scale Transformation,GST)函数,它描述了输入灰度值与输出灰度值之间的转换关系。

一旦灰度变换函数确定,该点运算就完全确定下来了。

另外,点运算处理将改变图像的灰度直方图分布。

点运算又被称为对比度增强、对比度拉伸或灰度变换。

点运算一般包括灰度的线性变换、阈值变换、窗口变换、灰度拉伸与均衡等。

图像几何变换就是图像的一种基本变换,通常包括图像镜像变换、图像转置、图像平移、图像缩放与图像旋转等,其理论基础主要就是一些矩阵运算,详细原理可以参考有关书籍。

实验系统提供了图像灰度直方图、点运算与几何变换相关内容的文字说明,用户在操作过程中可以参考。

下面以图像点运算中的阈值变换为例给出编程实现的程序流程图,如下:2、图像正交变换的基本原理及编程实现步骤数字图像的处理方法主要有空域法与频域法,点运算与几何变换属于空域法。

数字图像处理实验-灰度直方图

数字图像处理实验-灰度直方图

实验一灰度直方图1.实验目的:(1)加强灰度直方图的图像增强技术的认识和了解;(2)掌握均衡化处理方法对图像做增强处理;2.实验内容:如下图所示是一张大脑的医学核磁共振( MRI)图像,原图由于对比度太低而使得大脑的内部组织层次不清,欲利用直方图均衡等方法对该图做增强处理,先编制出位图读取程序,对该图像进行灰度值统计,并在屏幕上绘制出相应的直方图。

3.实验结果(代码&结果可视化)1)编写程序设原始图像在x,y处的灰度为f而改变后的图像为g则对图像增强的方法即为在x,y处的灰度f映射为g在直方图均衡化处理中对图像的映射函数可以定义为g=Q(f), 即是一个累加分布函数CDF。

实际处理变换算法是先对原始图像的灰度情况进行统计分析并计算出原始直方图分布。

然后根据计算出的累计直方图分布求出f->g的灰度映射关系。

重复上述步骤得到原始图像所有灰度级到目标图像灰度级的映射关系后按照这个映射关系对原始图像各点像素进行灰度转换即可完成对原始图像的直方图均衡化。

具体算法:首先统计原始图像的各级灰度值在程序中定义了一个数组lCount[256]来统计原设计图像的各级灰度值,然后对得到的灰度值做灰度映射将映射后的结果存到一个新的灰度映射关系数组bMap[256]中根据这个数组就可以确定出原始图像的某个灰度级经过变换后对应于德灰度级,最后将变换后的结果保存到DIB中。

2)核心程序for (i = 0; i < lHeight; i ++){for (j = 0; j < lWidth; j ++){lpSrc = (unsigned char *)lpDIBBits + lLineBytes * i + j;lCount[*(lpSrc)]++; // 计数加1}}// 统计原设计图像的各级灰度值// 计算灰度映射关系for (i = 0; i < 256; i++){lTemp = 0; // 初始为0for (j = 0; j <= i ; j++){lTemp += lCount[j];}bMap[i] = (BYTE) (lTemp * 255 / lHeight / lWidth); // 计算对应的新灰度值}for(i = 0; i < lHeight; i++)// 每行{for(j = 0; j < lWidth; j++)// 每列{// 指向DIB 第i 行第j 个象素的指针lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;// 保存新的灰度值*lpSrc = bMap[*lpSrc];}}3)直方图绘制4.实验分析和总结直方图均衡化处理后图像的直方图较为平直,各灰度级的值相对均匀。

直方图直方图均衡化增强

直方图直方图均衡化增强

直方图均衡化的原理
灰度直方图的计算十分简单,依据定义在离散形式下有下面的 公式成立:
nk p(k ) k 0,1, 2...L 1 其中L 1 255 (1 ) n
nk 为图像中出现灰度为k的像素数,n是图像像素总数 公式中: ,而 n n 即为频数 。
k
ni k (2)计算累积直方图各项:tk p i , k 0,1, L 1 i 0 n i 0
Gy ( z 3 2 z 6 z 9) ( z1 2 z 4 z 7) 计算出Gx和Gy的值后,用下式计算(x,y)点处的梯度值
2 2 1/2 g [Gx Gy ]
计算出给点处的梯度值后,设定一个合适的阈值T, 如果(x,y)处的g≥T则认为该点是边缘点。
Z1
Z4 Z7
数字图像直方图均衡化增强
实验三 数字图像边缘检测
边缘检测
边缘能勾划出目标物体,使观察者一目了然,边缘蕴含丰富 的内在信息(方向、阶跃性质和形状等)。从本质上说,图像边缘 是图像局部特征不连续性(灰度突变、颜色突变和纹理结构突变 等)的反映,它标志着一个区域的终结和另一个区域的开始。 边缘提取首先检测出图像局部特征的不连续性,然后再将这 些不连续的边缘像素连成完备的边界。边缘的特征是沿边缘走向 的像素变化平缓,而垂直于边缘方向的像素变化剧烈,所以,从 这个意义上说,提取边缘的算法就是检测出符合边缘特性的边缘 像素的算子。目前提取边缘常采用边缘算子法、曲面拟合法和模 板匹配法等方法。 两个具有不同灰度值的相邻区域之间总存在边缘,边缘是灰 度值不连续的结果,这种不连续性通常可以利用求导数的方法方 便地检测到,一般常用一阶导数和二阶导数来检测边缘。边缘检 测的基本思想是首先利用边缘增强算子,突出图像中的局部边缘, 然后定义像素的“边缘强度”,通过设置门限的方法提取边缘点 集。常用的边缘检测算子有Robert算子、Sobel算子、LOG算子 和Canny算子。

计算图像的直方图

计算图像的直方图

南通大学计算机科学与技术学院《数字图像处理》课程实验报告书实验名计算图像的直方图班级计 121姓名张进学号 12130220162014年6月 16 日一、实验内容1、打开一张图,计算其直方图。

二、图像直方图的概念图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。

纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。

图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。

在实际工程中,图像直方图在特征提取、图像匹配等方面都有很好的应用。

三、灰度直方图的计算1、灰度直方图的定义灰度直方图是灰度级的函数,描述图像中该灰度级的像素个数(或该灰度级像素出现的频率):其横坐标是灰度级,纵坐标表示图像中该灰度级出现的个数(频率)。

一维直方图的结构表示为高维直方图可以理解为图像在每个维度上灰度级分布的直方图。

常见的是二维直方图。

如红-蓝直方图的两个分量分别表示红光图像的灰度值和蓝光图像灰度值的函数。

其图像坐标(Dr,Db)处对应在红光图像中具有灰度级Dr同时在蓝光图像中具有灰度级Db的像素个数。

这是基于多光谱——每个像素有多个变量——的数字图像,二维中对应每个像素统计个变量。

简单的说,直方图就是对数据进行统计,将统计值组织到一系列事先定义好的bin中。

bin的数值是从数据中计算出的特征的统计量,这些数据可以是诸如梯度,方向,色彩或者任何其他特征。

无论如何,直方图获得的是数据分布的统计图。

通常直方图的数据要低于原始数据。

由于原始数据点可以表征任何事情,所以直方图实际上是一个方便表示图像特征的手段。

2、灰度直方图的计算对于彩色图像的R、G、B各彩色分量取反的技术就是图像的反色处理,这在处理二值化图像的连通区域选取的时候非常重要。

如物体连通域用黑色表示,而二值化后的物体连通域图像可那是白色的,而背景是黑色的,这时应手动选取图像的反色处理或有程序根据背景和物体连通域两种颜色的数量所占比例而自动选择是否选择选取图像的反色处理int main(){Mat Image=imread("../cat.png");cvtColor(Image,Image,CV_BGR2GRAY);const int channels[1]={0};const int histSize[1]={256};float hranges[2]={0,255};const float* ranges[1]={hranges};MatND hist;calcHist(&Image,1,channels,Mat(),hist,1,histSize,ranges);return 0;}3、彩色直方图计算int main(){Mat Image=imread("../cat.png");const int channels[3]={0,1,2};const int histSize[3]={256,256,256};float hranges[2]={0,255};const float* ranges[3]={hranges,hranges,hranges};MatND hist;calcHist(&Image,1,channels,Mat(),hist,3,histSize,ranges);return 0;}4、不均匀直方图分别统计0-50,50-80,80-150,150-230,230-255区间的灰度分布:int main(){Mat Image=imread("../cat.png");cvtColor(Image,Image,CV_BGR2GRAY);const int channels[1]={0};int histSize[1]={5};float hranges[6]={0,50,80,150,230,255};const float* ranges[1]={hranges};MatND hist;calcHist(&Image,1,channels,Mat(),hist,1,histSize,ranges,false);return 0;}四、直方图的显示直方图计算得到的实际上是一个多维数组,这并不够直观,我们希望能够像在Excel中把相关数据通过表的形式表示出来。

图像的直方图统计实验报告

图像的直方图统计实验报告

华侨大学数字图像处理与图像通信实验报告实验题目:图像的直方图统计专业、班级:通信3班学生姓名:学号:分数:2014 年 6 月 4 日一、实验目的:掌握直方图统计的算法原理和程序设计,了解各种图像的直方图统计的意义及其用途。

二、实验设备:计算机、matlab 7.0软件三、实验原理灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数,其横坐标表示像素的灰度级别,纵坐标是该灰度出现的频率(像素个数与图像像素总数之比)。

直方图的作法如下: a )将图像的灰度级归一化若图像的灰度级为:0,1,,1,L -则令,0,1,,110 1.k k kr k L L r ==--≤≤则在灰度级中,0k r =代表黑,1k r =代表白。

对于一幅给定的图像来说,每一个像素取得[0,1]区间内的灰度级是随机的,也就是说k r 是一个随机变量。

b)计算各灰度级的像素概率()()k k k r k k r k n r n n p r n n k p r =设为灰度级为的像素的个数,为总的像素个数,令是像素值为的像素的频数,为其出现的概率 c)作图建立直角坐标系,横轴表示r k 的取值,纵轴表示p r (r k )的取值,作p r (r k )的函数图。

四、实验内容:实现对一幅灰度图像的像素的统计,并绘制直方图。

程序编码:I=imread('C:\MATLAB7\work\2.png'); figure(1)subplot(1,2,1) imshow(I); title('原图') add=[];tab1=zeros(1,256) for n=0:255 X=I==n;add=[add;sum(sum(X))]; end;[a b]=size(I); final=add/(a*b); subplot(1,2,2); bar(0:255,final,'g'); title('灰度级图象')原图-100010*******00.0050.010.0150.020.0250.030.035灰度级图象。

(精品)数字图像处理实验报告--直方图规定化

(精品)数字图像处理实验报告--直方图规定化

数字图像处理实验报告直方图匹配规定化直方图均衡化能够自动增强整个图像的对比度,但它的具体增强效果不容易控制,处理的结果总是得到全局均匀化的直方图。

实际上有时需要变换直方图,使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度。

这时可以采用比较灵活的直方图规定化。

一般来说正确地选择规定化的函数可以获得比直方图均衡化更好的效果。

所谓直方图规定化,就是通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图。

所以,直方图修正的关键就是灰度映像函数。

直方图匹配方法主要有3个步骤(这里设M和N分别为原始图和规定图中的灰度级数,且只考虑N≤M的情况):(1) 如同均衡化方法中,对原始图的直方图进行灰度均衡化:(2) 规定需要的直方图,并计算能使规定的直方图均衡化的变换:(3) 将第1个步骤得到的变换反转过来,即将原始直方图对应映射到规定的直方图,也就是将所有pf(fi)对应到pu(uj)去。

一、A图直方图规定B图Matlab程序:%直方图规定化clear allA=imread('C:\Users\hp\Desktop\A.tif'); %读入A图像imshow(A) %显示出来title('输入的A图像')%绘制直方图[m,n]=size(A); %测量图像尺寸B=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255B(k+1)=length(find(A==k))/(m*n); %计算每级灰度出现的概率,将其存入B中相应位置endfigure,bar(0:255,B,'g'); %绘制直方图title('A图像直方图')xlabel('灰度值')ylabel('出现概率')axis([0,260,0,0.015])C=imread('C:\Users\hp\Desktop\B.tif');%读入B图像imshow(C) %显示出来title('输入的B图像')%绘制直方图[m,n]=size(C); %测量图像尺寸D=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255D(k+1)=length(find(C==k))/(m*n); %计算每级灰度出现的概率,将其存入D中相应位置endfigure,bar(0:255,D,'g'); %绘制直方图title('B图像直方图')xlabel('灰度值')ylabel('出现概率')axis([0,260,0,0.015])S1=zeros(1,256);for i=1:256for j=1:iS1(i)=D(j)+S1(i); %计算B灰度图累计直方图endendcounts=Bfigure,bar(0:255,counts,'r')title('A图像直方图 ')S2=zeros(1,256);for i=1:256for j=1:iS2(i)=counts(j)+S2(i);endend; %"累计"规定化直方图%对比直方图,找到相差最小的灰度级for i=1:256for j=1:255if S1(j)<=S2(i)&S1(j+1)>=S2(i)if abs(S1(j)-S2(i))<=abs(S1(j+1)-S2(i)) T(i)=j;else T(i)=j+1;endendendend%确定变换关系,重组直方图H=zeros(1,256);H(1)=S2(1);for i=2:255if T(i-1)>0for k=(T(i-1)+1):T(i)H(i)=H(i)+D(k);endelse H(i)=0;endendfigure,bar(0:255,H,'g') %显示规定化后的直方图title('A规定B后的直方图')xlabel('灰度值')ylabel('出现概率')axis([0,260,0,0.6])%显示规定图PA=C; %将各个像素归一化后的灰度值赋给这个像素for i=1:mfor j=1:nfor k=2:255if T(k-1)<=C(i,j)&C(i,j)<=T(k)PA(i,j)=k;break;endendendendfigure,imshow(PA) %显示规定化后的图像title('A规定B后图像')imwrite(PA,'guidinghua.bmp');二、用已知直方图规定A图规定灰度为[zeros(1,49),0.3,zeros(1,49),0.1,zeros(1,49),0.2,zeros(1,49),0.1,zeros(1,49 ),0.2,zeros(1,49),0.1]Matlab程序:clear allA=imread('C:\Users\hp\Desktop\B.tif'); %读入A图像imshow(A) %显示出来title('输入的A图像')%绘制直方图[m,n]=size(A); %测量图像尺寸B=zeros(1,256); %预创建存放灰度出现概率的向量for k=0:255B(k+1)=length(find(A==k))/(m*n); %计算每级灰度出现的概率,将其存入B中相应位置endfigure,bar(0:255,B,'g'); %绘制直方图title('A图像直方图')xlabel('灰度值')ylabel('出现概率')axis([0,260,0,0.015])S1=zeros(1,256);for i=1:256for j=1:iS1(i)=B(j)+S1(i); %计算原灰度图累计直方图endendcounts=[zeros(1,49),0.3,zeros(1,49),0.1,zeros(1,49),0.2,zeros(1,49),0.1,zer os(1,49),0.2,zeros(1,49),0.1];%规定化直方图figure,bar(1:300,counts,'r')title('规定化直方图')S2=zeros(1,256);for i=1:256for j=1:iS2(i)=counts(j)+S2(i);endend; %"累计"规定化直方图%对比直方图,找到相差最小的灰度级for i=1:256for j=1:256if S1(j)<=S2(i)&S1(j+1)>=S2(i)if abs(S1(j)-S2(i))<=abs(S1(j+1)-S2(i)) T(i)=j;else T(i)=j+1;endendendend%确定变换关系,重组直方图H=zeros(1,256);H(1)=S2(1);for i=2:256if T(i-1)>0for k=(T(i-1)+1):T(i)H(i)=H(i)+B(k);endelse H(i)=0;endendfigure,bar(0:255,H,'g') %显示规定化后的直方图title('规定化后的直方图')xlabel('灰度值')ylabel('出现概率')axis([0,260,0,0.6])%显示规定图PA=A; %将各个像素归一化后的灰度值赋给这个像素for i=1:mfor j=1:nfor k=2:256if T(k-1)<=A(i,j)&A(i,j)<=T(k)PA(i,j)=k;break;endendendendfigure,imshow(PA) %显示规定化后的图像title('规定化后图像')imwrite(PA,'guidinghua.bmp');。

图像直方图实验报告

图像直方图实验报告

图像直方图实验报告图像直方图实验报告一、引言图像直方图是一种用于分析和描述图像亮度分布的工具。

通过统计图像中不同亮度级别的像素数量,我们可以获得图像的亮度分布情况,从而更好地理解图像的特征和内容。

本实验旨在通过对不同图像的直方图分析,探索图像直方图在图像处理中的应用。

二、实验方法1. 实验材料本实验使用了三张不同类型的图像:一张自然风景图像、一张人物肖像图像和一张抽象艺术图像。

2. 实验步骤(1)打开图像处理软件,并导入所选图像。

(2)选择图像直方图功能,并生成图像的直方图。

(3)观察直方图的形状和分布情况,并记录下来。

(4)根据观察结果,分析图像的亮度特征和内容特点。

三、实验结果与分析1. 自然风景图像的直方图自然风景图像的直方图呈现出较为平均的分布,亮度分布范围广泛。

这表明该图像中包含了丰富的亮度细节,从明亮的天空到昏暗的山脉,再到黑暗的树林,图像中的各个部分亮度差异较大。

这种直方图特点与自然风景图像的特点相符,展示了大自然的多样性和丰富性。

2. 人物肖像图像的直方图人物肖像图像的直方图呈现出较为集中的分布,亮度主要集中在中间区域。

这表明该图像中的人物主体亮度较为均匀,没有明显的高光或阴影。

这种直方图特点与人物肖像图像的特点相符,突出了人物的面部特征和表情。

3. 抽象艺术图像的直方图抽象艺术图像的直方图呈现出较为离散的分布,亮度分布呈现出一定的规律性。

这表明该图像中存在着一些重复出现的亮度模式或纹理。

这种直方图特点与抽象艺术图像的特点相符,强调了艺术家对于形式和结构的探索。

四、实验总结通过对不同类型图像的直方图分析,我们可以发现图像直方图与图像内容和特征之间存在一定的关联性。

自然风景图像的直方图展示了大自然的多样性和丰富性,人物肖像图像的直方图突出了人物的面部特征和表情,抽象艺术图像的直方图强调了艺术家对于形式和结构的探索。

因此,在图像处理中,我们可以通过对图像直方图的分析,更好地理解图像的内容和特征,为后续的图像处理工作提供参考。

数字图像处理实验大纲

数字图像处理实验大纲

《数字图像处理》实验教学大纲课程编号:课程名称:数字图像处理实验总学时数:8学时适应专业:电子信息工程、信息工程承担实验室:信息工程学院实验室一、实验教学的目的和任务1.目的掌握数字图像处理的基本理论及分析方法,掌握数字图像加减及逻辑运算、图像变换、图像增强、二进制图像操作处理及滤波等原理。

2.任务能够熟练地用Matlab语言编写数字图像处理的各种应用程序,计算图像统计参数,对数字图像进行二维离散Fourier变换,掌握图像边缘检测、图象去噪及各种高通、低通滤波的程序实现方法,并能解决实际中的问题。

二、实验项目及学时分配三、每项实验的内容和要求实验一:数字图像文件基本类型的转换1.实验目的、意义1)了解Matlab支持4种图像类型:灰度图像、二值图像、索引图像和RGB图像。

2)学会运用RGB颜色空间与灰度图像类型的转换3)分析灰度图像与二值图像的变换关系。

2.实验内容1)灰度图像与索引图像的相互转换2)RGB 图像与索引图像的相互转换3)将灰度图像转换为二值化图像3.实验要求1)实验之前要预习,简述图像文件基本类型的转换原理和方法;2)写出实验报告。

报告要求:有实验目的,实验内容,实验过程,实验小结。

实验二:数字图像FFT变换1.实验目的、意义1)掌握二维Fourier变换的基本定义以及快速Fourier变换的方法;2)学会运用zeros; fft2;ifft2; fftshift等函数3)分析二维离散Fourier变换的基本特点。

2.实验内容1)创建一副图像,大小为128*128,背景为黑色,中间开出一个8×8白色的窗口;2)运用ff2函数,对上面产生的图像做二维离散傅立叶变换;3)把低频分量移到图像中心,而把高频分量移到四个角上。

采用两种方法:a)在FFT以前对测试图像逐点加权;b)利用FFTSHIFT函数4) 利用图像增强中动态范围压缩的方法增强傅立叶变换并在频域中显示变换结果。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告重庆邮电⼤学《数字图像处理》课程上机实验学院⽣物信息学院专业⽣物医学⼯程班级 0611302姓名李霞学号 2013211957实验⼀MATLAB数字图像处理初步⼀、实验⽬的与要求1.熟悉及掌握在MATLAB中能够处理哪些格式图像。

2.熟练掌握在MATLAB中如何读取图像。

3.掌握如何利⽤MATLAB来获取图像的⼤⼩、颜⾊、⾼度、宽度等等相关信息。

4.掌握如何在MATLAB中按照指定要求存储⼀幅图像的⽅法。

5.图像间如何转化。

⼆、实验原理及知识点1、数字图像的表⽰和类别⼀幅图像可以被定义为⼀个⼆维函数f(x,y),其中x和y是空间(平⾯)坐标,f 在任何坐标处(x,y)处的振幅称为图像在该点的亮度。

灰度是⽤来表⽰⿊⽩图像亮度的⼀个术语,⽽彩⾊图像是由单个⼆维图像组合形成的。

例如,在RGB彩⾊系统中,⼀幅彩⾊图像是由三幅独⽴的分量图像(红、绿、蓝)组成的。

因此,许多为⿊⽩图像处理开发的技术适⽤于彩⾊图像处理,⽅法是分别处理三副独⽴的分量图像即可。

图像关于x和y坐标以及振幅连续。

要将这样的⼀幅图像转化为数字形式,就要求数字化坐标和振幅。

将坐标值数字化成为取样;将振幅数字化成为量化。

采样和量化的过程如图1所⽰。

因此,当f的x、y分量和振幅都是有限且离散的量时,称该图像为数字图像。

作为MATLAB基本数据类型的数值数组本⾝⼗分适于表达图像,矩阵的元素和图像的像素之间有着⼗分⾃然的对应关系。

根据图像数据矩阵解释⽅法的不同,MA TLAB把其处理为4类:亮度图像(Intensity images)⼆值图像(Binary images)索引图像(Indexed images)RGB图像(RGB images)(1) 亮度图像⼀幅亮度图像是⼀个数据矩阵,其归⼀化的取值表⽰亮度。

若亮度图像的像素都是uint8类或uint16类,则它们的整数值范围分别是[0,255]和[0,65536]。

若图像是double类,则像素取值就是浮点数。

实验-直方图统计及亮度调整

实验-直方图统计及亮度调整

实验2.直方图统计及亮度调整一、实验目的了解并掌握直方图统计方法以及分段线性拉伸、直方图均衡等亮度调整算法,通过观察对这些运算建立感性认识。

二、实验内容1.观察各类图像的直方图;2.操作LUT灰度对照表,进行分段线性拉伸;3.采用直方图均衡方法对低对比度的图像进行对比度增强。

三、基本原理1.直方图的定义图象的灰度直方图是一个函数,表示数字图象中每一灰度级与该灰度级出现的频数(即具有这一灰度级的象素数目)间的对应关系:P(b)N(b)MM为一幅图象所包含的象素总数;N(b)为图象中灰度值为b的象素总数。

通常,以灰度值b为横坐标,N(b)为纵坐标。

直方图是图象中象素灰度值的一阶概率分布密度的一种近似。

2.对比度增强对比度增强又称为点运算,逐点改变输入图象的每一象素的灰度,而各象素的位置不改变,一般用来拓宽图象的灰度范围。

(1)灰度变换法(LUT对照)典型的对比度拉伸灰度变换关系如图1所示,其对应关系如下:0f af g(f a)gaa f b(f b)gbb f L式中,f、g分别表示输入及输出图象,、、为折线段的斜率,a、b决定低、中、高灰度级的范围。

选择不同的、、、a、b、ga及gb数值,可得到各种各样的灰度拉伸效果。

灰度变换前后的灰度变化范围是不变的,对一部分灰度区域的扩张(感兴趣区)都是以其它区域的压缩为代价的。

gLgb可见,输出和输入图象之间各点的灰度是按照一定的映射关系相联系的,这种映射关系在计算机中则是通过一个查照表(look-up table,即LUT)实现的。

通过LUT对照改变了图象中不同灰度特性趋于的对比度或反差(contrast),达到改善视觉效果的目的。

(2)直方图均衡直方图均衡(histogram equalization)就是通过点运算使输入图像的灰度分布较为均匀,使图像具有较好的视觉效果。

设r,s分别为原图和新图的灰度,r(r),s(s)分别为原图及新图的概率密度函数,则均衡变换为原图像的累积分布函数:s T(r)r(r)0r对于离散图像,均衡转换公式为:Lsk)Pr(rj)maxMj0k nj0kj其中,Lmax指图像中的最大灰度值(对于灰度图像就是255)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二数字图像的直方图统计一、实验目的1.了解对灰度图像进行直方图统计的基本原理;2.掌握用VC编程实现直方图统计的方法;3.在微机上调试程序;5. 分析数字图像直方图的特点。

二、实验原理图像的直方图图像的(灰度统计)直方图是一个一维的离散函数。

它的定义为:设s k为图像f(x,y)的第k级灰度值,n k是f(x,y)中具有灰度值s k的象素的个数,n是图像象素总数,则:p s(s k)= n k/n k=0,1, ,L-1称为图像f(x,y)的直方图。

这里p s(s k)代表原始图中第k个灰度级的出现概率。

以n k为自变量,以p s(s k)为函数,得到的曲线就是图像的直方图,在实际中常常直接将对第k个灰度级的统计值n k作为图像的直方图。

它提供了原图灰度值的分布情况,也可以说给出了一幅图所有灰度值的整体描述。

对灰度图像进行直方图统计的程序流程图如图2-1所示。

图2-1 灰度图像直方图统计流程三、实验前准备1.预习本实验中关于数字图像直方图统计的有关内容;2. 预习VC中添加对话框的步骤和方法;3.了解本实验的目的和实验内容。

四、实验内容1.在实验一的基础上读入并显示一幅数字图像;2.编写对灰度图像进行直方图统计的程序,并将结果显示在屏幕上。

五、实验报告要求1.总结对灰度图像进行直方图统计的过程,比较不同的图像其直方图特性;2.对实验结果进行分析。

六、参考步骤和程序在实验一的基础上,进行如下操作:1、点击ResourceView,右键点击Dialog,选Insert Dialog 在属性对话框中将ID改为ID_HIST,对话框名称改为“直方图”2、在工具栏中点“插入”-“新建类”,输入类名,并选Base Class为CDialog,Dialog ID为ID_HIST。

这样就将对话框和类联系起来了,在该对话框中拖入一Edit控件,将其ID 设为IDC_HISTSHOW;3、快捷键“Ctrl+W”,出现MFC ClassWizard对话框,在Messages栏中分别选WM_INITDIALOG和WM_Paint,再点击“Add Function”,即将对话框初始化和画图函数加入对话框类之中。

4、在Hist.h文件“public:”下面输入如下变量定义:LONG m_lCount[256];char* m_lpDIBBits;LONG m_lWidth;LONG m_lHeight;int m_iIsDraging;CDlgIntensity(CWnd* pParent = NULL);5、打开Hist.cpp程序,在CHist::OnInitDialog()函数中“// TODO: Add extra initialization here”前将如下代码拷贝进去:unsigned char* lpSrc;LONG i;LONG j;6、在“// TODO: Add extra initialization here”后将如下代码拷贝进去:CWnd* pWnd=GetDlgItem(IDC_HISTSHOW);pWnd->GetClientRect(m_MouseRect);pWnd->ClientToScreen(&m_MouseRect);CRect rect;GetClientRect(rect);ClientToScreen(&rect);m_MouseRect.top-=rect.top;m_MouseRect.left-=rect.left;m_MouseRect.top+=25;m_MouseRect.left+=10;m_MouseRect.bottom=m_MouseRect.top+255;m_MouseRect.right=m_MouseRect.left+256;for(i=0;i<256;i++){m_lCount[i]=0;}LONG lLineBytes;lLineBytes=WIDTHBYTES(m_lWidth*8);for(i=0;i<m_lHeight;i++){for(j=0;j<m_lWidth;j++){lpSrc=(unsigned char*)m_lpDIBBits+lLineBytes*i+j;m_lCount[*(lpSrc)]++;}}m_iIsDraging=0;7、在CHist::OnPaint()函数“CPaintDC dc(this);”前将如下代码拷如其中:CString str;LONG i;LONG lMaxCount=0;LONG m_iLowGray=0;LONG m_iUpGray=255;在CHist::OnPaint()函数“// TODO: Add your message handler code here”后将如下代码拷如其中:CWnd* pWnd=GetDlgItem(IDC_ HISTSHOW);CDC* pDC=pWnd->GetDC();pWnd->Invalidate();pWnd->UpdateWindow();pDC->Rectangle(0,0,330,300);CPen* pPenRed=new CPen;pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));CPen* pPenBlue=new CPen;pPenBlue->CreatePen(PS_SOLID,1,RGB(0,0,255));CPen* pPenGreen=new CPen;pPenGreen->CreatePen(PS_SOLID,1,RGB(0,255,0));CGdiObject* pOldPen=pDC->SelectObject(pPenRed); pDC->MoveTo(10,10);pDC->LineTo(10,280);pDC->LineTo(320,280);str.Format("0");pDC->TextOut(10,283,str);str.Format("50");pDC->TextOut(60,283,str);str.Format("100");pDC->TextOut(110,283,str);str.Format("150");pDC->TextOut(160,283,str);str.Format("200");pDC->TextOut(210,283,str);str.Format("255");pDC->TextOut(265,283,str);for(i=0;i<256;i+=5){if((i&1)==0){pDC->MoveTo(i+10,280);pDC->LineTo(i+10,284);}else{pDC->MoveTo(i+10,280);pDC->LineTo(i+10,282);}}pDC->MoveTo(315,275);pDC->LineTo(320,280);pDC->LineTo(315,285);pDC->MoveTo(10,10);pDC->LineTo(5,15);pDC->MoveTo(10,10);pDC->LineTo(15,15);for(i=m_iLowGray;i<=m_iUpGray;i++){if(m_lCount[i]>lMaxCount){lMaxCount=m_lCount[i];}}pDC->MoveTo(10,25);pDC->LineTo(14,25);str.Format("%d",lMaxCount);pDC->TextOut(11,26,str);pDC->SelectObject(pPenGreen);pDC->MoveTo(m_iLowGray+10,25);pDC->LineTo(m_iLowGray+10,280);pDC->MoveTo(m_iUpGray+10,25);pDC->LineTo(m_iUpGray+10,280);pDC->SelectObject(pPenBlue);if(lMaxCount>0){for(i=m_iLowGray;i<=m_iUpGray;i++){pDC->MoveTo(i+10,280);pDC->LineTo(i+10,281-(int)(m_lCount[i]*256/lMaxCount));}}pDC->SelectObject(pOldPen);delete pPenRed;delete pPenBlue;delete pPenGreen;8、点开ResourceView中的Menu,出现IDR_MAINFRAME和IDR_MY111TYPE,双击IDR_MY111TYPE就出现了程序界面,有文件、编辑、查看、窗口、帮助按钮。

点“查看”下面的虚线框右键——点“属性”,输入标题(直方图),和ID(大写英文,如ID_VIEW_HIST),这样就将按钮和程序通过ID联系起来了,点击该按钮,就会执行相应的程序。

下面为该按钮添加函数:点Ctrl+W ,出现MFC ClassWizard对话框,选Class name为CMy111View,在Object IDs对应的选项中选中设置的ID(如为ID_VIEW_HIST),在Messages选项中选中COMMAND,然后点击“Add Function”按钮,选默认设置,就为ID_VIEW_HIST添加了相应的函数OnViewHist()。

该函数在111View.cpp文件中定义,在函数void CMy111View:: OnViewHist()添加如下代码:// TODO: Add your command handler code hereCMy111Doc* pDoc=GetDocument();if(pDoc->m_hDIB==NULL){MessageBox("请先打开一幅256色的BMP图像!","系统提示",MB_ICONINFORMATION|MB_OK);return;}LPSTR lpDIB;LPSTR lpDIBBits;lpDIB=(LPSTR)::GlobalLock((HGLOBAL)pDoc->GetHDIB());lpDIBBits=::FindDIBBits(lpDIB);if(::DIBNumColors(lpDIB)!=256){MessageBox("目前只支持查看256色位图灰度直方图!","系统提示",MB_ICONINFORMATION|MB_OK);::GlobalUnlock((HGLOBAL)pDoc->GetHDIB());return;}BeginWaitCursor();CHist dlgPara;dlgPara.m_lpDIBBits=lpDIBBits;dlgPara.m_lWidth=::DIBWidth(lpDIB);dlgPara.m_lHeight=::DIBHeight(lpDIB);// dlgPara.m_iLowGray=0;// dlgPara.m_iUpGray=255;if(dlgPara.DoModal()!=IDOK){return;}::GlobalUnlock((HGLOBAL)pDoc->GetHDIB()); EndWaitCursor();。

相关文档
最新文档