数字图像处理实验一(位图文件信息的提取和二值化处理)

合集下载

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告实验一数字图像处理编程基础一、实验目的1. 了解MATLAB图像处理工具箱;2. 掌握MATLAB的基本应用方法;3. 掌握MATLAB图像存储/图像数据类型/图像类型;4. 掌握图像文件的读/写/信息查询;5. 掌握图像显示--显示多幅图像、4种图像类型的显示方法;6. 编程实现图像类型间的转换。

二、实验内容1. 实现对图像文件的读/写/信息查询,图像显示--显示多幅图像、4种图像类型的显示方法、图像类型间的转换。

2. 运行图像处理程序,并保存处理结果图像。

三、源代码I=imread('cameraman.tif')imshow(I);subplot(221),title('图像1');imwrite('cameraman.tif')M=imread('pout.tif')imview(M)subplot(222),imshow(M);title('图像2');imread('pout.bmp')N=imread('eight.tif')imview(N)subplot(223),imshow(N);title('图像3');V=imread('circuit.tif')imview(V)subplot(224),imshow(V);title('图像4');N=imread('C:\Users\Administrator\Desktop\1.jpg')imshow(N);I=rgb2gary(GRB)[X.map]=gary2ind(N,2)RGB=ind2 rgb(X,map)[X.map]=gary2ind(I,2)I=ind2 gary(X,map)I=imread('C:\Users\dell\Desktop\111.jpg');subplot(231),imshow(I);title('原图');M=rgb2gray(I);subplot(232),imshow(M);[X,map]=gray2ind(M,100);subplot(233),imshow(X);RGB=ind2rgb(X,map);subplot(234),imshow(X);[X,map]=rbg2ind(I);subplot(235),imshow(X);四、实验效果实验二 图像几何变换实验一、实验目的1.学习几种常见的图像几何变换,并通过实验体会几何变换的效果;2.掌握图像平移、剪切、缩放、旋转、镜像等几何变换的算法原理及编程实现;3.掌握matlab 编程环境中基本的图像处理函数。

数字图像处理 实验 bmp位图的二值化与反色

数字图像处理 实验 bmp位图的二值化与反色

XXXXXXXX大学(数字图形处理)实验报告实验名称bmp位图的二值化与反色实验时间年月日专业姓名学号预习操作座位号教师签名总评一、实验目的:1. 理解图像的象素操作,理解二值化与反色的本质。

2. 能够使用VC++6.0进行简单的二值化与反色的变换。

二、实验原理:计算机只能处理离散的信号,因此必须进行转换,而利用福利叶变换和傅里叶级数能够使连续的信号离散化从而进行二值化。

图像的反色就依次求出每个像素点的补色,由于用的是256位的图像,所以只需要使用255减去原本像素的色值即可。

三、实验内容:根据实验一的结果,在VC++6.0开发环境下的资源编辑器中,在主菜单中添加一名为“基本运算”的菜单,在其中建立子菜单“点运算”,并在其中添加两个名为“二值化”“发色”的子菜单,分别给他们命名为“IDM_ERZHI”、“IDM_FANSE”的ID,分别通过类向导建立函数。

在函数体中分别加入如下代码:void CHangView::OnErzhi(){// TODO: Add your command handler code herelong w,h,i,j;w=m_DibHead->biWidth;h=m_DibHead->biHeight;unsigned char temp(0);for(i<0;j<3*h;j++)for(j<0;j<w;j++){temp=*(m_Image+i*w+j);if(temp>50)*(m_Image+i*w+j)=255;else*(m_Image+i*w+j)=0;}Invalidate(false);}void CHangView::OnFanse(){// TODO: Add your command handler code herelong w,h;unsigned char *lpsrc;lpsrc=m_Image;w=m_DibHead->biWidth;h=m_DibHead->biHeight;long x,y;int f,a,b;a=1;b=0;for(y=0;y<h;y++)for(x=0;x<w;x++){f=*(lpsrc+y*w+x);*(lpsrc+y*w+x)=255-f;}Invalidate();}四、实验总结:当程序运行没有错误,但是不能够实现函数功能的时候,是因为没有Invalidate函数,而没有能够使试图更新。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告1. 引言数字图像处理是使用计算机来处理和优化图像的一种技术。

在本实验中,我们将探索几种常见的数字图像处理方法,并使用Python编程语言和相关库来实现。

2. 实验目的本实验的主要目的是:1.了解图像的基本特性和数字图像处理的基本原理;2.熟悉Python编程语言和相关图像处理库的使用;3.实现常见的图像处理算法并进行实验验证。

3. 实验方法在本实验中,我们使用Python编程语言和以下相关库来实现图像处理算法:•OpenCV:用于图像读取、显示和保存等基本操作;•Numpy:用于图像数据的处理和算术运算;•Matplotlib:用于图像的可视化和结果展示。

以下是实验涉及到的图像处理方法和步骤:1.图像读取和显示:使用OpenCV库读取图像,使用Matplotlib库显示图像;2.图像的灰度化:将彩色图像转换为灰度图像;3.图像的二值化:将灰度图像转换为黑白二值图像;4.图像的平滑处理:使用平滑滤波器对图像进行平滑处理,如均值滤波和高斯滤波;5.图像的边缘检测:使用边缘检测算法对图像进行边缘检测,如Sobel算子和Canny算子;6.图像的直方图均衡化:对灰度图像进行直方图均衡化,增强图像的对比度。

4. 实验过程和结果4.1 图像读取和显示首先,我们使用OpenCV库读取一张图像,并使用Matplotlib库显示该图像:import cv2import matplotlib.pyplot as plt# 读取图像img = cv2.imread('image.jpg')# 显示图像plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.axis('off')plt.show()4.2 图像的灰度化接下来,我们将彩色图像转换为灰度图像:# 灰度化图像gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 显示灰度图像plt.imshow(gray_img, cmap='gray')plt.axis('off')plt.show()4.3 图像的二值化然后,我们将灰度图像转换为黑白二值图像:# 二值化图像_, binary_img = cv2.threshold(gray_img, 128, 255, cv2.THRESH_BINARY)# 显示二值图像plt.imshow(binary_img, cmap='gray')plt.axis('off')plt.show()4.4 图像的平滑处理接下来,我们使用平滑滤波器对图像进行平滑处理,例如使用5x5的均值滤波器和高斯滤波器:# 均值滤波mean_img = cv2.blur(img, (5, 5))# 高斯滤波gaussian_img = cv2.GaussianBlur(img, (5, 5), 0) # 显示平滑处理后的图像plt.figure(figsize=(10, 5))plt.subplot(121)plt.imshow(cv2.cvtColor(mean_img, cv2.COLOR_BGR2R GB))plt.title('Mean Filter')plt.axis('off')plt.subplot(122)plt.imshow(cv2.cvtColor(gaussian_img, cv2.COLOR_B GR2RGB))plt.title('Gaussian Filter')plt.axis('off')plt.show()4.5 图像的边缘检测然后,我们使用边缘检测算法对图像进行边缘检测,例如使用Sobel算子和Canny算子:# 边缘检测sobel_img = cv2.Sobel(gray_img, cv2.CV_8U, 1, 1, ksize=3)canny_img = cv2.Canny(gray_img, 50, 150)# 显示边缘检测结果plt.figure(figsize=(10, 5))plt.subplot(121)plt.imshow(sobel_img, cmap='gray')plt.title('Sobel Operator')plt.axis('off')plt.subplot(122)plt.imshow(canny_img, cmap='gray')plt.title('Canny Operator')plt.axis('off')plt.show()4.6 图像的直方图均衡化最后,我们对灰度图像进行直方图均衡化,以增强图像的对比度:# 直方图均衡化equalized_img = cv2.equalizeHist(gray_img)# 显示直方图均衡化结果plt.imshow(equalized_img, cmap='gray')plt.axis('off')plt.show()5. 实验总结通过本实验,我们熟悉了数字图像处理的基本方法和步骤,并使用Python编程语言和相关库实现了图像的读取、显示、灰度化、二值化、平滑处理、边缘检测和直方图均衡化等操作。

图像二值化实验报告c

图像二值化实验报告c

竭诚为您提供优质文档/双击可除图像二值化实验报告c篇一:图像处理实验报告1常用mATLAb图像处理命令一、实验目的1、熟悉并掌握mATLAb工具的使用;2、实现图像的读取、显示、代数运算和简单变换。

二、实验环境mATLAb20XXa版本、wIn7计算机三、常用函数?读写图像文件1imreadimread函数用于读入各种图像文件,如:a=imread(e:\w01.tif)2imwriteimwrite函数用于写入图像文件,如:imwrite(a,e:\w02.tif,’tif’)3imfinfoimfinfo函数用于读取图像文件的有关信息,如:imfinfo(e:\w01.tif)?图像的显示1imageimage函数是mATLAb提供的最原始的图像显示函数,如:a=[1,2,3,4;4,5,6,7;8,9,10,11,12];image(a);2imshowimshow函数用于图像文件的显示,如:i=imread(e:\w01.tif);imshow(i);title(‘原图像’)%加上图像标题3colorbarcolorbar函数用显示图像的颜色条,如:i=imread(e:\w01.tif);imshow(i);colorbar;4figurefigure函数用于设定图像显示窗口,如:figure(1);/figure(2);5subplot把图形窗口分成多个矩形部分,每个部分可以分别用来进行显示。

subplot(m,n,p)分成m*n个小窗口,在第p个窗口中创建坐标轴为当前坐标轴,用于显示图形。

6plot绘制二维图形plot(y)plot(x,y)xy可以是向量、矩阵。

?图像类型转换1rgb2gray把真彩图像转换为灰度图像i=rgb2gray(j)2im2bw通过阈值化方法把图像转换为二值图像I=im2bw(j,level)Level表示灰度阈值,取值范围0~1(即0.n),表示阈值取自原图像灰度范围的n%3imresize改变图像的大小I=imresize(j,[mn])将图像j大小调整为m行n列?图像运算1imadd两幅图像相加,要求同样大小,同种数据类型Z=imadd(x,y)表示图像x+y2imsubstract两幅图像相减,要求同样大小,同种数据类型Z=imsubtract(x,y)表示图像x-y3immultiplyZ=immultiply(x,y)表示图像x*y4imdivideZ=imdivide(x,y)表示图像x/y四、心得体会学习了matlab中基本的图像处理命令,为以后图像处理打下了较好的基础。

数字图像处理实验报告

数字图像处理实验报告

目录实验一:数字图像的基本处理操作 (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()等函数。

数字图像处理二值图像处理PPT课件

数字图像处理二值图像处理PPT课件
图6-8 曲线的链码表示
第14页/共57页
(d) 边界的8链码表
•链 码 的 表 示 方 法 具 有 下 面 一 些 有 趣 的 特 性 : • ① 如果曲线上的像素数目为N,那么链码的长度则为N-1; • ② 链码是和起点相关的,不同的起点可以得到不同的链码表示。 • ③ 链码具有平移的不变性,也就是说曲线的位置变动不改变其链码结构; • ④ 曲线的旋转将使得得到的链码中的每个元素分量增加相同的数值。
• 对于离散的的数字图像f(i,j),矩定义为:
• 对于二值图像,在目标区域R有f(i,j)=1,背景区域f(i,j)=0,因此:
M 1 N 1
mpq
i p j q f (i, j) p, q 0,1,2
i0 j0
mpq
ip jq
(i, j)R
第22页/共57页
• 同样的,考察二值图像各阶矩,我们可以知道,其零阶矩m00为目标区域的面 积,也即区域中包含的点数;假设
• ② 对称性:

• ③ 三角不等式:
d(A, B) 0
d(A, B) d(B, A) d(A,C) d(A, B) d(B,C)
第2页/共57页
•假 设 计 算 点 P ( a , b ) 与 Q ( c , d ) 间 距 离 可 以 采 取 下 面 的 几 种 定 义 形 式 :

① 欧几里德距离,用来De表示,如下式所示:
阶矩称为惯性矩。
•中心矩 :
pq (x x) p ( y y)q f (x, y)dxdy p, q 0,1,2
第21页/共57页
• 低阶矩主要描述区域的面积、转动惯量、质心等等,具有明显得几何意义,而高 阶矩一般主要描述区域的细节特征,比如三阶矩描述扭曲度,四阶矩描述峰值的状 态等等,一般来说高阶矩受到图像离散化等的影响,高阶矩一般在应用中不一定十 分准确。

数字图像处理实验报告

数字图像处理实验报告

《数字图像处理》实验报告专业:软件工程*名:***学号: S********* 指导老师:***2019年 12 月 28 日信息学部软件学院目录实验一、BMP文件的读写 (1)1 实验目的与实验内容 (1)2 实验原理 (1)3 实验关键代码 (1)4 实验运行结果 (3)5 总结 (4)实验二、图像缩放 (4)1 实验目的及内容 (4)2 实验原理 (5)3 实验关键代码和运行结果 (6)4 结果分析 (8)实验三、直方图均衡 (9)1 实验目的及内容 (9)2 实验原理 (9)3 实验关键代码和实验结果 (10)4 思考题 (11)5结果分析 (12)实验四、图像滤波 (12)1 实验目的及内容 (12)2 图像滤波的原理 (12)3 实验关键代码及结果 (13)实验五、图像的灰度映射 (17)1 实验目的及内容 (17)2 实验关键代码及结果 (17)3 不同参数的变换结果 (20)附录一 (17)实验要求:用 c/c++语言编程实现以下功能实验环境:Windows10开发工具:CodeBlocks实验一、BMP文件的读写1 实验目的与实验内容1.1灰度 BMP 图像的读写:(1) 读入 lena.bmp 文件;(2) 通过文件内容得出文件大小,位图数据起始字节,图像长、宽以及每像素的位数等信息;(3) 提取出原图像中的位图数据,另存为 lena.raw, 并通过 photoshop 打开该文件,查看所读取的数据。

(4)仅取原始图像左上角 1/4 的数据,另存一个 lenas.bmp 图像,在photoshop 中打开查看效果。

1.2 彩色 BMP 图像读写(1) 读入文件 lena_C.bmp 文件;(2) 通过文件内容得出文件大小,位图数据起始字节,图像长、宽以及每像素的位数等信息;(3) 提取出原图像中的位图数据,另存为 lena_C.raw, 并通过 photoshop 打开该文件,查看所读取的数据。

数字图像处理实验指导书

数字图像处理实验指导书

实验一:图像文件类型转换实验目的:理解数字图像文件的几种基本类型掌握在MATLAB中进行图象文件类型转换的方法观察图象转换前后的效果加深对图象文件类型的理解熟悉图象格式、颜色系统间的转换实验内容:1)灰度图像与索引图像的相互转换2)RGB图像与索引图像的相互转换3)将图像转换为二值化图像实验方法:利用MATLAB工具进行实验一、灰度图像到索引图像的转换启动MATLAB,新建一个自己的工作文件夹(如下图中的“MYFIG”)。

并把它设置在当前的工作路径(Current Directory)下。

1)在该文件夹中拷入个灰度图片,比如“2.jpg”文件。

2)在MATLAB命令输入窗中,调用函数info=imfinfo('2.jpg')观查2.jpg是否为灰度图像在ColorType: 'grayscale' 属性行如此显示,则说明以2.jpg命名的文件为灰度图像。

3)输入如下命令完成转换RGB=imread('2.jpg'); % 将图像“2.jpg”的数据赋给变量RGBfigure(3); % 设定显示窗口3imshow(RGB); % 显示原“2.jpg”文件figure(1); % 设定显示窗口1[RGB1,map1]=gray2ind(RGB,128); % 指定灰度级128,进行灰度图像到索引图像转换imshow(RGB1,map1) ; % 显示索引图像1figure(2); % 设定显示窗口2[RGB2,map2]=gray2ind(RGB,16); % 指定灰度级16,进行灰度图像到索引图像转换imshow(RGB2,map2) ; % 显示索引图像2imwrite(RGB1,map1,'3.bmp'); % 将索引图像1保存为名为“3.bmp”的文件imwrite(RGB2,map2,'4.bmp'); % 将索引图像2 保存为名为“4.bmp”的文件info=imfinfo('3.bmp')info=imfinfo('4.bmp')运行并观察结果和现象。

计算机图像处理实验

计算机图像处理实验

位图文件信息的提取和二值化处理实验步骤:1.拷贝MinGW文件夹至C:(路径为C:\MinGW)2.编辑setc.bat文件,然后运行此批处理以设置路径。

3.编辑hdr.h 和hdr.c文件4.编辑bmphdr.c文件,然后在当前文件路径下,使用DOS命令:gcc -c hdr.c //编译,生成hdr.o目标文件gcc -c bmphdr.c //编译,生成bmphdr.o目标文件gcc -o bmphdr.exe hdr.o bmphdr.o //链接,生成bmphdr.exe执行文件使用bmphdr.exe来提取某一个bmp文件的头信息,例如:bmphdr test.bmp5.编辑 ez.c文件(用于图像的二值化处理),然后gcc -c ez.c //编译,生成ez.o目标文件gcc -o ez.exe hdr.o ez.o //链接,生成ez.exe执行文件使用 ez.exe文件来对某一个bmp文件进行二值化处理。

例如:ez test.bmp result.bmp 108 (对test.bmp文件进行二值化处理,阈值为108,处理的结果为result.bmp文件)hdr.h文件内容:#ifndef __HDR_H__#define __HDR_H__struct bmphdr {char signature[2];int size;short reserved[2];int offset;int hdr_size;int width;int height;short nr_planes;short bits_per_pixel;int compress_type;int data_size;int resol_hori;int resol_vert;int nr_colors;int important_color;char info[1024];};struct bmphdr *get_header(char filename[]);#endifhdr.c文件内容:#include <stdio.h>#include <memory.h>#include "hdr.h"struct bmphdr *get_header(char filename[]){FILE *fp;struct bmphdr *hdr;fp = fopen(filename, "rb");if (!fp) {printf("File open error or such file does not exist!\n");return NULL;}hdr = (struct bmphdr *)malloc(sizeof(struct bmphdr));fread(hdr->signature, 2, 1, fp);if (hdr->signature[0] != 'B' || hdr->signature[1] != 'M') { printf("Not a bmp file!\n");return NULL;}fread(&hdr->size, 4, 1, fp);fread(hdr->reserved, 4, 1, fp);fread(&hdr->offset, 4, 1, fp);fread(&hdr->hdr_size, 4, 1, fp);fread(&hdr->width, 4, 1, fp);fread(&hdr->height, 4, 1, fp);fread(&hdr->nr_planes, 2, 1, fp);fread(&hdr->bits_per_pixel, 2, 1, fp);fread(&hdr->compress_type, 4, 1, fp);fread(&hdr->data_size, 4, 1, fp);fread(&hdr->resol_hori, 4, 1, fp);fread(&hdr->resol_vert, 4, 1, fp);fread(&hdr->nr_colors, 4, 1, fp);fread(&hdr->important_color, 4, 1, fp);if (hdr->offset > 54)fread(&hdr->info, 1024, 1, fp);fclose(fp);return hdr;}bmphdr.c文件内容:#include <stdio.h>struct bmphdr {char signature[2];int size;short reserved[2];int offset;int hdr_size;int width;int height;short nr_planes;short bits_per_pixel;int compress_type;int data_size;int resol_hori;int resol_vert;int nr_colors;int important_color;} header;int main(int argc, char *argv[]){FILE *fp;if (argc != 2) {printf("Usage: %s <filename>\n", argv[0]);exit(1);}fp = fopen(argv[1], "r");if (!fp) {printf("File open error or such file does not exist!\n");exit(1);}fread(header.signature, 2, 1, fp);if (header.signature[0] != 'B' || header.signature[1] != 'M') {printf("Not a bmp file!\n");exit(1);}fread(&header.size, 4, 1, fp);fread(header.reserved, 4, 1, fp);fread(&header.offset, 4, 1, fp);fread(&header.hdr_size, 4, 1, fp);fread(&header.width, 4, 1, fp);fread(&header.height, 4, 1, fp);fread(&header.nr_planes, 2, 1, fp);fread(&header.bits_per_pixel, 2, 1, fp);fread(&press_type, 4, 1, fp);fread(&header.data_size, 4, 1, fp);fread(&header.resol_hori, 4, 1, fp);fread(&header.resol_vert, 4, 1, fp);fread(&header.nr_colors, 4, 1, fp);fread(&header.important_color, 4, 1, fp);fclose(fp);printf("signature %c%c\n", header.signature[0], header.signature[1]);printf("size %d\n", header.size);printf("offset %d\n", header.offset);printf("hdr_size %d\n", header.hdr_size);printf("width %d\n", header.width);printf("height %d\n", header.height);printf("nr_planes %d\n", header.nr_planes);printf("bits_per_pixel %d\n", header.bits_per_pixel);printf("compress_type %d\n", press_type);printf("data_size %d\n", header.data_size);printf("resol_hori %d\n", header.resol_hori);printf("resol_vert %d\n", header.resol_vert);printf("nr_colors %d\n", header.nr_colors);printf("important_color %d\n", header.important_color);printf("\n");return 0;}二值化程序ez.c 文件内容:#include <stdio.h>#include <stdlib.h>#include <memory.h>#include "hdr.h"struct bmphdr *hdr;unsigned char *bitmap, *to;char buf[2048];int main(int argc, char *argv[]){int i, j, k, nr_pixels;FILE *fp, *fpnew;unsigned g;if (argc != 4) {printf("Usage: %s <file_from> <file_to> <threshold>\n", argv[0]);exit(1);}hdr = get_header(argv[1]);if (!hdr) exit(1);fp = fopen(argv[1], "rb");if (!fp) {printf("File open error!\n");exit(1);}fseek(fp, hdr->offset, SEEK_SET);nr_pixels = hdr->width * hdr->height;bitmap = malloc(nr_pixels);fread(bitmap, nr_pixels, 1, fp);fclose(fp);k = atoi(argv[3]);to = malloc(nr_pixels);memset(to, 0, nr_pixels);for (i = 0; i < nr_pixels; i++)to[i] = bitmap[i] > (unsigned char)k ? 255 : 0;fpnew = fopen(argv[2], "wb+");if (!fpnew) {printf("File create error!\n");exit(1);}fwrite(hdr->signature, 2, 1, fpnew);fwrite(&hdr->size, 4, 1, fpnew);fwrite(hdr->reserved, 4, 1, fpnew);fwrite(&hdr->offset, 4, 1, fpnew);fwrite(&hdr->hdr_size, 4, 1, fpnew);fwrite(&hdr->width, 4, 1, fpnew);fwrite(&hdr->height, 4, 1, fpnew);fwrite(&hdr->nr_planes, 2, 1, fpnew);fwrite(&hdr->bits_per_pixel, 2, 1, fpnew);fwrite(&hdr->compress_type, 4, 1, fpnew);fwrite(&hdr->data_size, 4, 1, fpnew);fwrite(&hdr->resol_hori, 4, 1, fpnew);fwrite(&hdr->resol_vert, 4, 1, fpnew);fwrite(&hdr->nr_colors, 4, 1, fpnew);fwrite(&hdr->important_color, 4, 1, fpnew);if (hdr->offset > 54)fwrite(hdr->info, hdr->offset - 54, 1, fpnew);fwrite(to, nr_pixels, 1, fpnew);fclose(fpnew);free(hdr);free(bitmap);return 0;}直方图均衡化直方图均衡化实质上是减少图象的灰度级以换取对比度的加大例如:假设原图的灰度分布级为126(最大为256,也就是从0到255的级上的灰度都有或多或少的出现),经过直方图均衡化后,灰度分布级别将会小于126。

数字图像处理实验报告

数字图像处理实验报告

图像处理实验名称:数字图像处理专业:测控技术与仪器*名:**学号: *********实验一一、实验内容:1.任选一幅图像,利用imread函数读入matlab中,存入矩阵I中。

2.利用whos命令提取该读图像的基本信息。

3.利用imshow()函数来显示矩阵I。

4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息。

5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩后的jpg文件。

6.利用im2bw将图像转化为二值图像,并且用imshow显示原图像和二值图像,观察图像的特征。

7.利用rgb2gray将图像转化为灰度图像,并且用imshow显示原图像和灰度图像,观察图像的特征。

二、实验程序:I=imread('1.png');whos I;subplot(131);imshow(I);title('原图');info=imfinfo('1.png')imwrite(I,'2.JPG');A=im2bw(I);subplot(132);imshow(A);title('二值图像');B=rgb2gray(I);subplot(133);imshow(B);title('灰度图像');三、运行结果:实验二一、实验内容:1.将图2.1中的(a)、(b)两幅图像叠加在一起:图2.12.给图2.2的每一个像素加上一个常数图2.23.利用图像减法消除背景,给图像减去一个常数图2.3二、程序及运行结果:(1)将图2.1中的(a)、(b)两幅图像叠加在一起::A=imread('21.png');B=imread('22.png');C=imadd(A,B);imshow(C);结果:(2)给图2.2的每一个像素加上一个常数A = imread('23.png');B = imadd(A,20);subplot(1,2,1);imshow(A);title('原图');subplot(1,2,2);imshow(B);title('每个像素加常数');现象:增加了图像的亮度(3)利用图像减法消除背景,给图像减去一个常数A=imread('24.png');subplot(131);imshow(A);title('原始图像');background=imopen(A,strel('disk',15));B=imsubtract(A,background);subplot(132);imshow(background);title('输出背景');subplot(133);imshow(B,[]);title('减法运算结果');注:代数运算的结果很容易超出数据类型允许的范围,超出数据范围的整型数据将被截取为数据范围的极值,分数结果将被四舍五入。

数字图像处理实验报告.doc

数字图像处理实验报告.doc

数字图像处理实验报告数字图像处理实验报告1一.实验内容:主要是图像的几何变换的编程实现,具体包括图像的读取、改写,图像平移,图像的镜像,图像的转置,比例缩放,旋转变换等.具体要求如下:1. 编程实现图像平移,要求平移后的图像大小不变;2. 编程实现图像的镜像;3. 编程实现图像的转置;4. 编程实现图像的比例缩放,要求分别用双线性插值和最近邻插值两种方法来实现,并比较两种方法的缩放效果;5. 编程实现以任意角度对图像进行旋转变换,要求分别用双线性插值和最近邻插值两种方法来实现,并比较两种方法的旋转效果.二.实验目的和意义:本实验的目的是使学生熟悉并掌握图像处理编程环境,掌握图像平移、镜像、转置和旋转等几何变换的方法,并能通过程序设计实现图像文件的读、写操作,及图像平移、镜像、转置和旋转等几何变换的程序实现.三.实验原理与主要框架3.1实验所用编程环境Visual C++(简称VC)是微软公司提供的基于C/C++的应用程序集成开发工具.VC拥有丰富的功能和大量的扩展库,使用它能有效的创建高性能的Windows应用程序和Wet应用程序.VC除了提供高效的C/C++编译器外,还提供了大量的可重用类和组件,包括著名的微软基础类库(MFC)和活动模板类库(ATL),因此它是软件开发人员不可多得的开发工具.VC丰富的功能和大量的扩展库,类的重用特性以及它对函数库、DLL库的支持能使程序更好的模块化,并且通过向导程序大大简化了库资源的使用和应用程序的开发,正由于VC具有明显的优势,因而我选择了它来作为数字图像几何变换的开发工具.在本程序的开发过程中,VC的核心知识、消息映射机制、对话框控件编程等都得到了生动的体现和灵活的应用.3.2实验处理的对象:256色的BMP(BIT MAP格式图像BMP(BIT MAP位图的文件结构:具体组成图:BITMAPFILEHEADER位图文件头(只用于BMP文件)bfType="BM" bfSize bfReserved1bfReserved2bfOffBitsbiSize biWidthbiHeight biPla nesbiBitCou ntbiCompressi onbiSizeimagebiXPelsPerMeterbiY PelsPerMeterbiClrUsedbiCirimporta nt单色DIB有2个表项16色DIB有16个表项或更少256色DIB有256个表项或更少真彩色DIB没有调色板每个表项长度为4字节(32位)像素按照每行每列的顺序排列每一行的字节数必须是4的整数倍BITMAPINFOHEAD位图信息头Palette 调色板DIBPixels DIB 图像数据1. BMP文件组成BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成.2. BMP文件头BMP文件头数据结构含有BMP文件的类型(必须为BMP)文件大小(以字节为单位)、位图文件保留字(必须为0)和位图起始位置(以相对于位图文件头的偏移量表示)等信息.3. 位图信息头BMP位图信息头数据用于说明位图的尺寸(宽度,高度等都是以像素为单位,大小以字节为单位,水平和垂直分辨率以每米像素数为单位),目标设备的级别,每个像素所需的位数,位图压缩类型(必须是0)等信息.4. 颜色表颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色.具体包含蓝色、红色、绿色的亮度(值范围为0-255)位图信息头和颜色表组成位图信息5. 位图数据位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上.Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充.3.3 BMP(BIT MAP )位图的显示:①一般显示方法:1. 申请内存空间用于存放位图文件2. 位图文件读入所申请内存空间中3. 在函数中用创建显示用位图,用函数创建兼容DC用函数选择显示删除位图但以上方法的缺点是:1)显示速度慢;2)内存占用大;3)位图在缩小显示时图形失真大,(可通过安装字体平滑软件来解决);4)在低颜色位数的设备上(如256显示模式)显示高颜色位数的图形(如真彩色)图形失真严重.②BMP位图缩放显示:用视频函数来显示位图,内存占用少,速度快,而且还可以对图形进行淡化(Dithering )处理.淡化处理是一种图形算法,可以用来在一个支持比图像所用颜色要少的设备上显示彩色图像.BMP位图显示方法如下:1. 打开视频函数,一般放在在构造函数中2. 申请内存空间用于存放位图文件3. 位图文件读入所申请内存空间中4. 在函数中显示位图5. 关闭视频函数,一般放在在析构函数中以上方法的优点是:1)显示速度快;2)内存占用少;3)缩放显示时图形失真小,4)在低颜色位数的设备上显示高颜色位数的图形图形时失真小;5)通过直接处理位图数据,可以制作简单动画3.4程序中用到的访问函数Win dows支持一些重要的DIB访问函数,但是这些函数都还没有被封装到MFC中,这些函数主要有:1. SetDIBitsToDevice 函数:该函数可以直接在显示器或打印机上显示DIB.在显示时不进行缩放处理.2. StretchDIBits 函数:该函数可以缩放显示DIB于显示器和打印机上.3. GetDIBits 函数:还函数利用申请到的内存,由GDI位图来构造DIB.通过该函数,可以对DIB的格式进行控制,可以指定每个像素颜色的位数,而且可以指定是否进行压缩.4. CreateDIBitmap函数:利用该函数可以从DIB出发来创建GDI 位图.5. CreateDIBSection 函数:该函数能创建一种特殊的DIB,称为DIB项,然后返回一个GDI位图句柄.6. LoadImage函数:该函数可以直接从磁盘文件中读入一个位图,并返回一个DIB句柄.7. DrawDibDraw 函数:Windows提供了窗口视频(VFW)组件,Visual C++支持该组件.VFW中的DrawDibDraw函数是一个可以替代StretchDIBits 的函数.它的最主要的优点是可以使用抖动颜色,并且提高显示DIB的速度,缺点是必须将VFW弋码连接到进程中.3.5图像的几何变换图像的几何变换,通常包括图像的平移、图像的镜像变换、图像的转置、图像的缩放和图像的旋转等.数字图像处理实验报告2一、实验的目的和意义实验目的:本实验内容旨在让学生通过用VC等高级语言编写数字图像处理的一些基本算法程序,来巩固和掌握图像处理技术的基本技能,提高实际动手能力,并通过实际编程了解图像处理软件的实现的基本原理。

数字图像处理 实验报告(完整版).doc

数字图像处理 实验报告(完整版).doc

数字图像处理实验一 MATLAB数字图像处理初步一、显示图像1.利用imread( )函数读取一幅图像,假设其名为lily.tif,存入一个数组中;2.利用whos 命令提取该读入图像flower.tif的基本信息;3.利用imshow()函数来显示这幅图像;实验结果如下图:源代码:>>I=imread('lily.tif')>> whos I>> imshow(I)二、压缩图像4.利用imfinfo函数来获取图像文件的压缩,颜色等等其他的详细信息;5.利用imwrite()函数来压缩这幅图象,将其保存为一幅压缩了像素的jpg文件,设为lily.jpg;语法:imwrite(原图像,新图像,‘quality’,q), q取0-100。

6.同样利用imwrite()函数将最初读入的tif图象另存为一幅bmp图像,设为flily.bmp。

7.用imread()读入图像Sunset.jpg和Winter.jpg;8.用imfinfo()获取图像Sunset.jpg和Winter.jpg的大小;9.用figure,imshow()分别将Sunset.jpg和Winter.jpg显示出来,观察两幅图像的质量。

其中9的实验结果如下图:源代码:4~6(接上面两个) >>I=imread('lily.tif')>> imfinfo 'lily.tif';>> imwrite(I,'lily.jpg','quality',20);>> imwrite(I,'lily.bmp');7~9 >>I=imread('Sunset.jpg');>>J=imread('Winter.jpg')>>imfinfo 'Sunset.jpg'>> imfinfo 'Winter.jpg'>>figure(1),imshow('Sunset.jpg')>>figure(2),imshow('Winter.jpg')三、二值化图像10.用im2bw将一幅灰度图像转化为二值图像,并且用imshow显示出来观察图像的特征。

实验一bmp位图的读取、显示、放大缩小、二值化和反色

实验一bmp位图的读取、显示、放大缩小、二值化和反色

(数字图像处理)实验报告实验名称实验一bmp位图的读取、显示、放大缩小、二值化和反色实验时间专业班级学号姓名成绩教师评语:一、实验目的1、掌握windows BMP格式位图文件的基本格式。

会使用VC++读取图像数据并显示。

2、在读取BMP格式位图的的基础上增加对图像的放大、缩小、二值化和反色的功能。

二、实验内容1、在VC6.0环境下,生成MFC应用程序框架。

2、在已生成的应用程序中,加BMP位图读取与显示的代码,从已有文件中读取bmp格式文件并在视图中显示。

3、在生成的MFC应用程序框架下建立对应的消息响应函数,实现对已在视图中显示的图像的放大、缩小、二值化和反色的具体操作。

三、实验原理具体操作步骤及结果截图基本原理:BMP位图文件格式BMP位图文件中主要由4部分内容组成:1、文件头BITMAPFILEHEADER为一STRUCTURE:typedef struct tagBITMAPFILEHEADER {WORD bfType;//文件类型,必须为“BM”或0x424dDWORD bfSize;//文件大小WORD bfReserved1;//保留WORD bfReserved2;//保留DWORD bfOffBits;//从文件头到实际位图数据的偏移字节数} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER, *PBITMAPFILEHEADER;2、位图信息头BITMAPINFOHEADER,定义如下:typedef struct tagBITMAPINFOHEADER{DWORD biSize;//structure sizeLONG biWidth;//image widthLONG biHeight;//image heightWORD biPlanes;//value is 1WORD biBitCount;//color bitsDWORD biCompression;//compression or notDWORD biSizeImage;//Imagesize=width*height( 其中width必须为4的倍数。

数字图像处理报告 图像二值化

数字图像处理报告 图像二值化

数字图像处理实验报告实验二灰度变换实验目的:通过实验掌握灰度变换的基本概念和方法实验内容:掌握基本的灰度变换:图像反转、对数变换、幂次变换和二值化1.图像反转、对数变换、幂次变换I=imread('fengjing.jpg');J=im2double(I);subplot(2,3,1),imshow(J); title('原图');K=255-I;subplot(2,3,2),imshow(K); title('图象反转');L=3.*log(1+J);subplot(2,3,3),imshow(L);title('图象对数,系数为3');M=10.*log(1+J);subplot(2,3,4),imshow(M);title('图象对数,系数为10');N=10.*(J.^0.2);subplot(2,3,5),imshow(N);title('图象指数变换,γ=0.2');P=10.*(J.^2.5);subplot(2,3,6),imshow(P);title('图象指数变换,γ=2.5');2.图象二值化方法一:I=imread('fengjing.jpg'); % 确定大小subplot(1,2,1),imshow(I);title('原图象'); [m,n]=size(I);for i=1:mfor j=1:nif I(i,j)<128I(i,j)=0;else I(i,j)>=128 & I(i,j)<256I(i,j)=255;endendendsubplot(1,2,2),imshow(I);title('图象二值化');方法二:I=imread('fengjing.jpg'); % 确定大小subplot(1,2,1),imshow(I);title('原图象');J=find(I<128);I(J)=0;J=find(I>=128);I(J)=255;title('图像二值化(阈值为128)'); subplot(1,2,2),imshow(I);title('图象二值化');。

《数字图像处理》实验指导书

《数字图像处理》实验指导书

数字图像处理实验指导书电气信息工程系实验中心2008年8月目 录实验一、数字图像获取实验二、图像的傅立叶变换实验三、图像增强实验四、图像压缩实验一、数字图像获取一、实验目的1.掌握使用扫描仪等数字化设备以及计算机获取数字图像的方法;2.修改图像的存储格式。

二、实验仪器1.计算机;2.扫描仪(或数码相机、数字摄像机)及其驱动程序盘;3.图像处理软件(画图,photoshop, Microsoft photo edit等);4.记录用的笔、纸。

三、 实验内容用扫描仪获取图像也是图像的数字化过程的方法之一,扫描仪按种类可以分为手持扫描仪,台式扫描仪和滚筒式扫描仪(鼓形扫描仪)。

扫描仪的主要性能指标有x、y方向的分辨率、色彩分辨率(色彩位数)、扫描幅面和接口方式等。

各类扫描仪都标明了它的光学分辨率和最大分辨率。

分辨率的单位是dpi,dpi是英文Dot Per Inch的缩写,意思是每英寸的像素点数。

扫描仪工作时,首先由光源将光线照在欲输入的图稿上,产生表示图像特征的反射光(反射稿)或透射光(透射稿)。

光学系统采集这些光线,将其聚焦在CCD上,由CCD将光信号转换为电信号,然后由电路部分对这些信号进行A/D转换及处理,产生对应的数字信号输送给计算机。

当机械传动机构在控制电路的控制下,带动装有光学系统和CCD的扫描头与图稿进行相对运动,将图稿全部扫描一遍,一幅完整的图像就输入到计算机中去了。

图1.1扫描仪的工作原理扫描仪扫描图像的步骤是:首先将欲扫描的原稿正面朝下铺在扫描仪的玻璃板上,原稿可以是文字稿件或者图纸照片;然后启动扫描仪驱动程序后,安装在扫描仪内部的可移动光源开始扫描原稿。

为了均匀照亮稿件,扫描仪光源为长条形,并沿y方向扫过整个原稿;照射到原稿上的光线经反射后穿过一个很窄的缝隙,形成沿x方向的光带,又经过一组反光镜,由光学透镜聚焦并进入分光镜,经过棱镜和红绿蓝三色滤色镜得到的RGB三条彩色光带分别照到各自的CCD上,CCD将RGB光带转变为模拟电子信号,此信号又被A/D变换器转变为数字电子信号。

数字图像处理实验报告

数字图像处理实验报告

数字图像处理实验报告数字图像处理实验报告一、引言数字图像处理是计算机科学与工程领域中的一个重要研究方向。

通过使用数字化技术,对图像进行采集、传输、存储和处理,可以实现对图像的增强、恢复、分析和识别等功能。

本实验旨在通过对数字图像处理算法的实践应用,探索图像处理的原理和方法。

二、实验目的本实验的主要目的是掌握数字图像处理的基本概念和算法,并通过实际操作加深对图像处理原理的理解。

具体目标包括:1. 学习使用图像处理软件,如Photoshop或Matlab等。

2. 掌握图像增强的方法,如直方图均衡化、滤波和锐化等。

3. 理解图像压缩和编码的原理,如JPEG和PNG等格式。

4. 了解图像分割和边缘检测的基本算法,如阈值分割和Canny边缘检测等。

三、实验过程1. 图像增强图像增强是指通过一系列算法和技术,改善图像的质量和视觉效果。

在实验中,我们可以使用直方图均衡化算法来增强图像的对比度和亮度。

该算法通过将图像的像素值映射到一个更大的范围内,使得图像的亮度分布更加均匀。

2. 图像滤波图像滤波是指通过一系列滤波器对图像进行处理,以实现去噪、平滑和锐化等效果。

在实验中,我们可以使用平滑滤波器(如均值滤波器和高斯滤波器)来去除图像中的噪声。

同时,我们还可以使用锐化滤波器(如拉普拉斯滤波器和Sobel滤波器)来增强图像的边缘和细节。

3. 图像压缩和编码图像压缩是指通过减少图像的数据量来减小图像文件的大小,从而实现存储和传输的效率提升。

在实验中,我们可以使用JPEG和PNG等压缩算法来对图像进行压缩和编码。

JPEG算法通过对图像的频域进行离散余弦变换和量化,实现对图像的有损压缩。

而PNG算法则采用无损压缩的方式,通过对图像的差值编码和哈夫曼编码,实现对图像的高效压缩。

4. 图像分割和边缘检测图像分割是指将图像分成若干个区域,以实现对图像的目标提取和图像分析的目的。

而边缘检测是指通过检测图像中的边缘和轮廓,实现对图像的形状分析和目标识别。

《数字图像处理》实验报告

《数字图像处理》实验报告

《数字图像处理》实验报告数字图像处理是计算机科学与技术领域中的一个重要分支,它涉及到对图像进行获取、处理、分析和显示等一系列操作。

在本次实验中,我们将学习和探索数字图像处理的基本概念和技术,并通过实验来加深对这些概念和技术的理解。

首先,我们需要了解数字图像的基本概念。

数字图像是由像素组成的二维矩阵,每个像素代表图像中的一个点,像素的灰度值或颜色值决定了该点的亮度或颜色。

在实验中,我们将使用灰度图像进行处理,其中每个像素的灰度值表示了该点的亮度。

在数字图像处理中,最基本的操作之一是图像的获取和显示。

我们可以通过摄像头或者从文件中读取图像数据,然后将其显示在计算机屏幕上。

通过这种方式,我们可以对图像进行观察和分析,为后续的处理操作做好准备。

接下来,我们将学习一些常见的图像处理操作。

其中之一是图像的灰度化处理。

通过将彩色图像转换为灰度图像,我们可以减少图像数据的维度,简化后续处理的复杂度。

灰度化处理的方法有多种,例如将彩色图像的RGB三个通道的像素值取平均值,或者使用加权平均值的方法来计算灰度值。

另一个常见的图像处理操作是图像的平滑处理。

图像平滑可以减少图像中的噪声,并使得图像更加清晰。

常用的图像平滑方法包括均值滤波和高斯滤波。

均值滤波通过计算像素周围邻域像素的平均值来平滑图像,而高斯滤波则使用一个高斯核函数来加权平均邻域像素的值。

除了平滑处理,图像的锐化处理也是数字图像处理中的一个重要操作。

图像的锐化可以增强图像的边缘和细节,使得图像更加清晰和鲜明。

常用的图像锐化方法包括拉普拉斯算子和Sobel算子。

这些算子通过计算像素周围邻域像素的差异来检测边缘,并增强边缘的灰度值。

此外,我们还将学习一些图像的变换操作。

其中之一是图像的缩放和旋转。

通过缩放操作,我们可以改变图像的尺寸,使其适应不同的显示设备或应用场景。

而旋转操作可以将图像按照一定的角度进行旋转,以达到某种特定的效果。

最后,我们将学习一些图像的特征提取和分析方法。

1数字图像处理实验报告

1数字图像处理实验报告

数字图像处理实验报告学号姓名日期实验一灰度图像的二值化处理一、实验目的图像二值化是数字图像处理技术中的一项基本技术,二值化图像的显示与打印十分方便,存储与传输也非常容易,在目标识别、图像分析、文本增强、字符识别等领域得到广泛应用。

图像二值化是将灰度图像转化为只有黑白两类像素的图像,大多采用阈值化算法处理。

在不同的应用中,阈值的选取决定着图像特征信息的保留。

因此,图像二值化技术的关键在于如何选取阈值。

二、实验内容1、编程绘制数字图像的直方图。

2、灰度图像二值化处理。

三、实验要求1、自己选择灰度图像。

2、选择多种阈值分割算法,并比较和分析图像二值化处理的结果。

3、使用VC++编程序。

四、设计思想(阈值选取算法)图像分割是自动目标识别的关键和首要步骤,其目的是将目标和背景分离,为计算机视觉的后续处理提供依据.通常图像分割包括阈值法、边缘检测法和区域跟踪法.其中阈值法是图像分割的常用方法.目前,已有众多的阈值分割方法有:单阀值分割、多阀值分割等及直方图算法。

根据人们利用均匀性参数和形状参数对标准图分割结果作评估的评测结论。

利用上面几种方法对遗传进行图像分割。

单阀值分割的设计思想:编码:由于图像灰度值在0—255之间,故将各个染色体编码为8位二进制码,它代表某个分割阈值.初始代人口的值为随机产生的,其相应的适应度值也各有高低.人口模型:若人口数过多,则每一代适应度值的计算量大,因此人口数设置应该合理.在此,设置人口数为l0,最大繁殖代数为50。

解码:对二进制染色体数组解码为0~255之间的值,以求其适应度值.适应度函数:采用(1)式为适应度值函数.同时采取对适应度函数的线性定标.选择:根据遗传算法的收敛定理,先进行赌轮法(蒙特卡罗法),再采用精英策略.交叉:交叉互换的重要特征是它能产生不同于父体的子体.交叉概率越大,交叉操作的可能性也越大;如果交叉率太低,收敛速度可能降低.单阀值分割由于只有一个参数,所以采用一点交叉。

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

数字图像处理实验一(位图文件信息的提取和二值化处理)实验平台:MinGW(Mini Gnu for Windows),里面包含gcc for windows的编译器,将其拷贝值某目录,然后设置环境变量(这里我设为c:\MinGW,通过一个批处理命令setc.bat实现)设置完成后,即可通过gcc(g++)命令进行编译。

(附:使用VC++ 6.0 也可)相关实验文件下载地址:ftp://218.193.154.238 /课件/数字图像处理/实验步骤:拷贝MinGW文件夹至C: (路径为C:\MinGW)编辑setc.bat文件,然后运行此批处理以设置路径。

编辑hdr.h 和hdr.c文件编辑bmphdr.c文件,然后在当前文件路径下,使用DOS命令:gcc -c hdr.c //编译,生成hdr.o目标文件gcc -c bmphdr.c //编译,生成bmphdr.o目标文件gcc -o bmphdr.exe hdr.o bmphdr.o //链接,生成bmphdr.exe执行文件使用bmphdr.exe来提取某一个bmp文件的头信息,例如:bmphdr test.bmp编辑ez.c文件(用于图像的二值化处理),然后gcc -c ez.c //编译,生成ez.o目标文件gcc -o ez.exe hdr.o ez.o //链接,生成ez.exe执行文件使用ez.exe文件来对某一个bmp文件进行二值化处理。

例如:ez test.bmp result.bmp 108 (对test.bmp文件进行二值化处理,阈值为108,处理的结果为result.bmp文件)setc.bat内容:@echo offset msdir=C:\MinGWset PATH="%msdir%\bin";"%PATH%"set INCLUDE=%msdir%\Include;%msdir%\MFC\Include;%INCLUDE%set LIB=%msdir%\Lib;%LIB%补充:如果以上批处理命令无效的话,可以:我的电脑->属性->高级->环境变量编辑变量path 增加C:\ MinGW\bin hdr.h文件内容:#ifndef __HDR_H__#define __HDR_H__struct bmphdr {char signature[2];int size;short reserved[2];int offset;int hdr_size;int width;int height;short nr_planes;short bits_per_pixel;int compress_type;int data_size;int resol_hori;int resol_vert;int nr_colors;int important_color;char info[1024];};struct bmphdr *get_header(char filename[]);#endifhdr.c文件内容:#include <stdio.h>#include <memory.h>#include "hdr.h"struct bmphdr *get_header(char filename[]){FILE *fp;struct bmphdr *hdr;fp = fopen(filename, "rb");if (!fp) {printf("File open error or such file does not exist!\n");return NULL;}hdr = (struct bmphdr *)malloc(sizeof(struct bmphdr));fread(hdr->signature, 2, 1, fp);if (hdr->signature[0] != 'B' || hdr->signature[1] != 'M') { printf("Not a bmp file!\n");return NULL;}fread(&hdr->size, 4, 1, fp);fread(hdr->reserved, 4, 1, fp);fread(&hdr->offset, 4, 1, fp);fread(&hdr->hdr_size, 4, 1, fp);fread(&hdr->width, 4, 1, fp);fread(&hdr->height, 4, 1, fp);fread(&hdr->nr_planes, 2, 1, fp);fread(&hdr->bits_per_pixel, 2, 1, fp);fread(&hdr->compress_type, 4, 1, fp);fread(&hdr->data_size, 4, 1, fp);fread(&hdr->resol_hori, 4, 1, fp);fread(&hdr->resol_vert, 4, 1, fp);fread(&hdr->nr_colors, 4, 1, fp);fread(&hdr->important_color, 4, 1, fp);if (hdr->offset > 54)fread(&hdr->info, 1024, 1, fp);fclose(fp);return hdr;bmphdr.c文件内容:#include <stdio.h>struct bmphdr {char signature[2];int size;short reserved[2];int offset;int hdr_size;int width;int height;short nr_planes;short bits_per_pixel;int compress_type;int data_size;int resol_hori;int resol_vert;int nr_colors;int important_color;} header;int main(int argc, char *argv[]){FILE *fp;if (argc != 2) {printf("Usage: %s <filename>\n", argv[0]);exit(1);}fp = fopen(argv[1], "r");if (!fp) {printf("File open error or such file does not exist!\n");exit(1);}fread(header.signature, 2, 1, fp);if (header.signature[0] != 'B' || header.signature[1] != 'M') { printf("Not a bmp file!\n");exit(1);}fread(&header.size, 4, 1, fp);fread(header.reserved, 4, 1, fp);fread(&header.offset, 4, 1, fp);fread(&header.hdr_size, 4, 1, fp);fread(&header.width, 4, 1, fp);fread(&header.height, 4, 1, fp);fread(&header.nr_planes, 2, 1, fp);fread(&header.bits_per_pixel, 2, 1, fp);fread(&press_type, 4, 1, fp);fread(&header.data_size, 4, 1, fp);fread(&header.resol_hori, 4, 1, fp);fread(&header.resol_vert, 4, 1, fp);fread(&header.nr_colors, 4, 1, fp);fread(&header.important_color, 4, 1, fp);fclose(fp);printf("signature %c%c\n", header.signature[0], header.signature[1]);printf("size %d\n", header.size);printf("offset %d\n", header.offset);printf("hdr_size %d\n", header.hdr_size);printf("width %d\n", header.width);printf("height %d\n", header.height);printf("nr_planes %d\n", header.nr_planes);printf("bits_per_pixel %d\n", header.bits_per_pixel);printf("compress_type %d\n", press_type);printf("data_size %d\n", header.data_size);printf("resol_hori %d\n", header.resol_hori);printf("resol_vert %d\n", header.resol_vert);printf("nr_colors %d\n", header.nr_colors);printf("important_color %d\n", header.important_color);printf("\n");return 0;}二值化程序ez.c 文件内容:#include <stdio.h>#include <stdlib.h>#include <memory.h>#include "hdr.h"struct bmphdr *hdr;unsigned char *bitmap, *to;char buf[2048];int main(int argc, char *argv[]){int i, j, k, nr_pixels;FILE *fp, *fpnew;unsigned g;if (argc != 4) {printf("Usage: %s <file_from> <file_to> <threshold>\n", argv[0]);exit(1);}hdr = get_header(argv[1]);if (!hdr) exit(1);fp = fopen(argv[1], "rb");if (!fp) {printf("File open error!\n");exit(1);}fseek(fp, hdr->offset, SEEK_SET);nr_pixels = hdr->width * hdr->height;bitmap = malloc(nr_pixels);fread(bitmap, nr_pixels, 1, fp);fclose(fp);k = atoi(argv[3]);to = malloc(nr_pixels);memset(to, 0, nr_pixels);for (i = 0; i < nr_pixels; i++)to[i] = bitmap[i] > (unsigned char)k ? 255 : 0;fpnew = fopen(argv[2], "wb+");if (!fpnew) {printf("File create error!\n");exit(1);}fwrite(hdr->signature, 2, 1, fpnew);fwrite(&hdr->size, 4, 1, fpnew);fwrite(hdr->reserved, 4, 1, fpnew);fwrite(&hdr->offset, 4, 1, fpnew);fwrite(&hdr->hdr_size, 4, 1, fpnew);fwrite(&hdr->width, 4, 1, fpnew);fwrite(&hdr->height, 4, 1, fpnew);fwrite(&hdr->nr_planes, 2, 1, fpnew);fwrite(&hdr->bits_per_pixel, 2, 1, fpnew);fwrite(&hdr->compress_type, 4, 1, fpnew);fwrite(&hdr->data_size, 4, 1, fpnew);fwrite(&hdr->resol_hori, 4, 1, fpnew);fwrite(&hdr->resol_vert, 4, 1, fpnew);fwrite(&hdr->nr_colors, 4, 1, fpnew);fwrite(&hdr->important_color, 4, 1, fpnew);if (hdr->offset > 54)fwrite(hdr->info, hdr->offset - 54, 1, fpnew);fwrite(to, nr_pixels, 1, fpnew);fclose(fpnew);free(hdr);free(bitmap);return 0;}。

相关文档
最新文档