图像的灰度变换.docx

上传人:牧羊曲112 文档编号:3093960 上传时间:2023-03-10 格式:DOCX 页数:9 大小:39.61KB
返回 下载 相关 举报
图像的灰度变换.docx_第1页
第1页 / 共9页
图像的灰度变换.docx_第2页
第2页 / 共9页
图像的灰度变换.docx_第3页
第3页 / 共9页
图像的灰度变换.docx_第4页
第4页 / 共9页
图像的灰度变换.docx_第5页
第5页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《图像的灰度变换.docx》由会员分享,可在线阅读,更多相关《图像的灰度变换.docx(9页珍藏版)》请在三一办公上搜索。

1、图像的灰度变换昆明理工大学实验报告 实验名称: 图像的灰度变换 专 业: 电子信息科学与技术 姓 名: 学 号: 成 绩: 实验目的 1、理解并掌握灰度变换的基本原理和方法。 2、编程实现图像灰度变换。 3、分析不同的灰度变换方法对最终图像效果的影响。 实验内容 1、灰度的线性变换; 2、灰度的非线性变换; 3、图像的二值化; 4、图像的反色处理; 实验原理 图像的灰度变换 ( gray scale transformation, GST ) 处理是图像增强处理技术中一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。灰度变换是指根据某种 目标条件按一定

2、变换关系逐点改变原图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。灰度变换有时又被称为图像的对比度增强或对比度拉伸。从图像输入装置得到的图像数据, 以浓淡表示, 各个像素与某一灰度值相对应。设原图像像素的灰度值 D=f(x,y),处理后图像像素的灰度值D= g (x,y),则灰度增强可表示为: g(x,y)=Tf(x,y) 或 D = T (D) 要求 D 和 D都在图像的灰度范围之内。函数 T(D) 称为灰度变换函数,它描述了输入灰度 值和输出灰度值之间的转换关系。灰度变换主要针对独立的像素点进行处理,通过改变原始图像数据所占据的灰度范围而使图像在视觉上得到良好的

3、改观,没有利用像素点之间的相互空间关系。因此,灰度变换处理方法也叫做点运算法。点运算可以按照预定的方式改变一幅图像的灰度直方图。除了灰度级的改变是根据某种特定的灰度变换函数进行之外,点运算可以看做是 “从像素到像素”的复制操作。根据g(x,y)=Tf(x,y) , 可以将灰度变换分为线性变换和非线性变换。 1、 灰度的线性变换 若g(x,y)=Tf(x,y)是一个线性或分段线性的单值函数,例如 g(x,y)=Tf(x,y)=af(x,y)+b 则由它确定的灰度变换称为灰度线性变换,简称线性变换。 某图像的灰度范围相当窄,灰度值 D 仅在较小区间内,灰度直方图集中于一部分,所看到的图像模糊,好像

4、没有灰度级似的,造成目标图像灰度值与背景灰度值相接近,人眼无法分辨检出。若利用灰度变换函数进行线性变换,使图像的直方图分布于整个灰度部分,图像的对比度扩展了。 2 、 灰度的非线性变换 某图像的像素集中于中间灰度部分,而其他部分的像素数很少。可以压缩像素数少的部分,扩展像素数集中的部分。如果只想很仔细地解析图像的某一部分,例如图像的高灰度部分时,只要进行增加高灰度部分的灰度级数的变换,压缩其他部分,就能得到增强高灰度部分的图像。这种变化又称为图像的局部增强。 3 、 二值化和反色处理 一幅图像包括 目标物体、背景还有噪声,怎样从多值的数字图像中只取出目标物体,最常用的方法就是设定某一阈值T,用

5、 T 将图像的数据分成两大部分:大于 T的像素群和小于 T 的像素群。这是研究灰度变换最特殊的方法,称为图像的二值化 (binarization ) 。二值化处理就是把图像 f(x,y)分成目标物体和背景两个领域。二值化是数字图像处理中一项最基本的变换方法,通过非零取一、固定阈值、双固定阈值等不同的阈值化变换方法, 使一幅灰度图变成了黑白二值图像。 实验步骤及主要代码 1、线性变换 打开菜单编辑器,在主菜单中添加一菜单项,选中弹出式选项,修改菜单名称为“点运算”。然后建立一下级菜单,给菜单一个ID号,修改caption为“灰度线性变换”,打开类向导,建立消息响应函数,实现图像灰度线性变换。添加

6、一个线性变换对话框用于输入斜率和截距。调出资源视图窗口,添加ID为IDD_DIALOG1的对话框资源,设计如图: 创建对话框类CDialogdl并按下表关联对应变量: 资源类型 资源ID 关联变量类型 关联变量名称 斜率文本框 IDC_EDIT1 float m_k 截距文本框 IDC_EDIT2 float m_b 添加如下代码: void CDLView:OnXianxing / TODO: Add your command handler code here float k,b; CDialogdl mydlg; if(mydlg.DoModal=IDOK) k=mydlg.m_k; b

7、=mydlg.m_b; long w,h; long i,j; if(m_DibHead=NULL) MessageBox(please open one image!); return; w=m_DibHead-biWidth; h=m_DibHead-biHeight; unsigned char *f=new unsigned charw*h; memset(f,0,w*h); float temp(0); for(i=0;ih;i+) for(j=0;jw;j+) temp=k*m_Imagei*w+j+b; if(temp255) temp=255; fi*w+j=(unsigned

8、 char)(temp); memcpy(m_Image,f,w*h); Invalidate; delete f; 2、分段线性变换 同线性变换一样建立相应的菜单并建立类向导。添加一个线性变换对话框用于输入分段点、。调出资源视图窗口,添加ID为IDD_DIALOG3的对话框资源,设计如图: 创建对话框类CDialogdl并按下表关联对应变量: 资源类型 资源ID 关联变量类型 关联变量名称 X1文本框 IDC_EDIT1 float m_x1 Y1文本框 IDC_EDIT2 float m_y1 X2文本框 IDC_EDIT3 float m_x2 Y2文本框 IDC_EDIT4 float

9、 m_y2 添加如下代码: void CDLView:OnFenduan int x1, y1,x2, y2; CDialog_fdxx mydlg; if(mydlg.DoModal=IDOK) x1=mydlg.m_x1; y1=mydlg.m_y1; x2=mydlg.m_x2; y2=mydlg.m_y2; long w,h; long i,j; if(m_DibHead=NULL) MessageBox(please open one image!); return; w=m_DibHead-biWidth; h=m_DibHead-biHeight; unsigned char *

10、f=new unsigned charw*h; memset(f,0,w*h); float temp(0); for(i=0;ih;i+) for(j=0;jw;j+) if(m_Imagei*w+jx1) temp=y1/x1*m_Imagei*w+j; else if(m_Imagei*w+j=x1) temp=(y2-y1)/(x2-x1)*(m_Imagei*w+j-x1)+y1; else temp=(255-y2)/(255-x2)*(m_Imagei*w+j-x2)+y2; fi*w+j=(unsigned char)(temp); memcpy(m_Image,f,w*h);

11、 Invalidate; delete f; 3、幂次变换 同上步骤处理,添加如下代码: void CDLView:OnMici / TODO: Add your command handler code here long w,h; long i,j; if(m_DibHead=NULL) MessageBox(please open one image!); return; w=m_DibHead-biWidth; h=m_DibHead-biHeight; unsigned char *f=new unsigned charw*h; memset(f,0,w*h); float c=2;

12、 int r=3; double temp(0); for(i=0;ih;i+) for(j=0;jw;j+) temp=c*pow(m_Imagei*w+j,r); if(temp255) temp=255; fi*w+j=(unsigned char)(temp); memcpy(m_Image,f,w*h); Invalidate; delete f; 4、对数变换 void CDLView:OnDuishu long w,h; long i,j; if(m_DibHead=NULL) MessageBox(please open one image!); return; w=m_Dib

13、Head-biWidth; h=m_DibHead-biHeight; unsigned char *f=new unsigned charw*h; memset(f,0,w*h); double c=100; double temp(0); for(i=0;ih;i+) for(j=0;jw;j+) temp=c*log10(m_Imagei*w+j+1); if(temp255) temp=255; fi*w+j=(unsigned char)(temp); memcpy(m_Image,f,w*h); Invalidate; delete f; 5、二值化 void CDLView:On

14、Yuzhi / TODO: Add your command handler code here int T; CDialog_YUZHI mydlg; if(mydlg.DoModal=IDOK) T=mydlg.m_T; long w,h; long i,j; if(m_DibHead=NULL) MessageBox(please open one image!); return; w=m_DibHead-biWidth; h=m_DibHead-biHeight; unsigned char *f=new unsigned charw*h; memset(f,0,w*h); float

15、 temp(0); for(i=0;ih;i+) for(j=0;j=T) temp=255; else temp=0; fi*w+j=(unsigned char)(temp); memcpy(m_Image,f,w*h); Invalidate; delete f; 6、反色 void CDLView:OnFanse / TODO: Add your command handler code here long w,h; long i,j; w=m_DibHead-biWidth; h=m_DibHead-biHeight; for(i=0;ih;i+) for(j=0;jw;j+) m_Imagei*w+j=255-m_Imagei*w+j; Invalidate; 实验结果 1、灰度的线性变换; 变换前 变换后 2、灰度的非线性变换; 变换前 3、图像的二值化;阈值50; 变换后 变换前 4、图像的反色处理; 变换后 变换前 变换后 实验总结 图像的灰度变换处理是图像增强处理技术中一种非常基础、直接的空间域图像处理方法,也是图像数字化软件和图像显示软件的一个重要组成部分。灰度变换是指根据某种目标条件按一定变换关系逐点改变原图像中每一个像素灰度值的方法。目的是为了改善画质,使图像的显示效果更加清晰。灰度变换有时又被称为图像的对比度增强或对比度拉伸。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号