实验报告-图像锐化
数字图像处理 (20 15 5 年春季学期) )
实 实
验
报 报
告 系别: 计算机科学与技术 机 班级:计算机 1 2-1 姓名: 依力夏提江·艾买尔 学号:1 210102 0129 实验名称: 图像锐化 《图像信息处理》实验报告 实验名称 图像锐化 实验序号 3 3 实验日期 20 15、 、 5 、2 25 实验人 依力夏提江·哎买尔 一、实验目得、要求与环境 1。目得:通过实验,了解数字图象锐化得一般方法,掌握图象锐化得编程方法,了解常见图象锐化效果得评价规则。
2、要求:将给定得图像进行锐化处理,要求首先将彩色图像灰度化,再使用锐化算法进行锐化,最后将图像二值化处理,分析锐化后得视觉效果,提交实验报告.锐化得算法不限,可采用 Sobel、Roberts、Priwitt、Laplacian、Wallis 等得一种或几种。实验将根据图像锐化得难度、种类、代码量与实验效果进行评分。
总成绩:
评语: :
日期:
序号:8
3、环境:Windows 7 操作系统 Microsoft Visual Studio 2005 (VS2005) 自带图像文件:
L1 、bmp:
二、实验步骤 1. 准备相关图像文件。
2.在 Win 7 操作系统上,打开Microsoft Visual Studio 2005,编写相关程序,完成程序主体框架结构。
3.编写图像锐化得彩色图像灰度化,Sobel 算法锐化,图像二值化处理相关得程序代码。
4.对程序进行相关调试,修改程序,去除其中得BUG. 5、 利用自己准备得图像得文件与编写得程序,进行图像锐化处理。
6。截屏,保留实验结果,进行实验结果分析,并撰写实验报告.
三、相关背景知识 (写您自己觉得比较重要得与本实验相关得背景知识) 在边缘检测中,常用得一种模板就是 Sobel 算子.Sobel 算子有两个,一个就是检测水平边缘得 ;另一个就是检测垂直边缘得 。与 Prewitt 算子相比,Sobel 算子对于象素得位置得影响做了加权,可以降低边缘模糊程度,因此效果更好。
Sobel算子另一种形式就是各向同性 Sobel(Isotropic Sobel)算子,也有两个,一个就是检测水平边缘得 ,另一个就是检测垂直边缘得 。各向同性Sobel算子与普通 Sobel算子相比,它得位置加权系数更为准确,在检测不同方向得边沿时梯度得幅度一致.将 Sobel算子矩阵中得所有 2 改为根号 2,就能得到各向同性 Sobel得矩阵. 由于 Sobel算子就是滤波算子得形式,用于提取边缘,可以利用快速卷积函数, 简单有效,因此应用广泛。美中不足得就是,Sobel 算子并没有将图像得主体与背景严格地区分开来,换言之就就是 Sobel 算子没有基于图像灰度进行处理,由于 Sobel算子没有严格地模拟人得视觉生理特征,所以提取得图像轮廓有时并不能令人满意。
在观测一幅图像得时候,我们往往首先注意得就是图像与背景不同得部分,正就是这个部分将主体突出显示,基于该理论,我们给出了下面阈值化轮廓提取算法,该算法已在数学上证明当像素点满足正态分布时所求解就是最优得。
四、编译与执行过程截图 (下面就是一个例子,换上您自己得图 )
六、实验结果与分析 (下面就是一个例子,换上您自己得图) 图像锐化: 源图:
灰度化:
再经过 Sobel 算法锐化:
再经过二值化后:
实验结果分析:
如上几个图像所示,之所以可以从人物、背景中提取出轮廓,就是因为轮廓部分得信息较强,因此,如果设定一个阀值,当图中小雨阀值得点(即灰度图中灰度变化较弱得点,被认为就是非边界点)置为黑,将图中大于阀值得点置为白,则可得到上图,这就把人物得边缘信息提取出来了. 在本实验得图像锐化过程中,所采用得公式为: So bel 边缘检测算法 索贝尔算子(Sobel operator)主要用作边缘检测,在技术上,它就是一离散性差分算子,用来运算图像亮度函数得灰度之近似值.在图像得任何一点使用此算子,将会产生对应得灰度矢量或就是其法矢量
Sobel卷积因子为:
该算子包含两组 3x3 得矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向得亮度差分近似值。如果以 A 代表原始图像,Gx及Gy 分别代表经横向及纵向边缘检测得图像灰度值,其公式如下:
具体计算如下:
Gx = (—1)*f(x—1, y-1) + 0*f(x,y—1)
+ 1*f(x+1,y-1)
+(-2)*f(x-1,y)
+ 0*f(x,y)+2*f(x+1,y)
+(—1)*f(x—1,y+1) + 0*f(x,y+1) + 1*f(x+1,y+1)
= [f(x+1,y—1)+2*f(x+1,y)+f(x+1,y+1)]—[f(x-1,y—1)+2*f(x—1,y)+f(x-1,y+1)]
Gy =1* f(x-1, y—1) + 2*f(x,y—1)+ 1*f(x+1,y-1)
+0*f(x—1,y)
0*f(x,y)
+ 0*f(x+1,y)
+(-1)*f(x-1,y+1) + (-2)*f(x,y+1) + (—1)*f(x+1, y+1)
= [f(x—1,y-1)
+ 2f(x,y-1) + f(x+1,y—1)]—[f(x-1, y+1) + 2*f(x,y+1)+f(x+1,y+1)]
其中 f(a,b), 表示图像(a,b)点得灰度值;
图像得每一个像素得横向及纵向灰度值通过以下公式结合,来计算该点灰度得大小:
七、主要相关程序源代码 7、1 彩色图像灰度化 void CBMPEdit::Gray() {
pImageData = (byte *)GlobalLock(m_hgImageData);
lWidth = m_BmpInfo、bmiHeader、biWidth;
lHeight = m_BmpInfo、bmiHeader、biHeight;
for ( int j = 0 ; j 〈 lHeight
; j++)
{
)++i ;
htdiWl < i ; 0 = i tni (rofﻩﻩ ﻩ {
// 值时临化度灰ﻩﻩ+ 992、0*))0 + 3 * i + eniLrePetyBn * j + ataDegamIp(*(elbuod = pmetﻩ
+
785、0*))1 + 3 * i + eniLrePetyBn * j + ataDegamIp(*(elbuodﻩﻩ ﻩﻩ
double(*(pImageData + j * nBytePerLine + i * 3 + 2))*0、114;
// 道通单到转图道通三ﻩﻩ(*ﻩ;)pmet(tni=)0 + 3 * i + eniLrePetyBn * j + ataDegamIpﻩ ﻩﻩ *(pImageData + j * nBytePerLine + i * 3 + 1)=int(temp);
ﻩ (* ;)pmet(tni=)2 + 3 * i + eniLrePetyBn * j + ataDegamIpﻩ
}ﻩ }ﻩ ;)ataDegamIgh_m(kcolnUlabolGﻩ} 7、2 Sobel 锐化
int CBMPEdit:: Sharpening() {
;htdiWib、redaeHimb、ofnIpmB_m = htdiWlﻩ lHeight = m_BmpInfo、bmiHeader、biHeight;
// 分配内存,以保存新DIB
;)thgieHl * eniLrePetyBn ,DNHG(collAlabolG = BIDhﻩ // 败失配分存内否是就断判ﻩ )LLUN == BIDh( fiﻩ {
ﻩ // 分配内存失败
return NULL;
}
pImageDataNew = (byte *)GlobalLock(hDIB); // 法算leboSﻩ )++j ;1 - thgieHl 〈 j ;1 = j tni( rofﻩ { ﻩ ﻩ for(int i = 1; i 〈 lWidth — 1; i++)
{ﻩﻩﻩ ; 0 = yg = xgﻩ
ﻩﻩ
ﻩﻩ val11=*(pImageData + (j-1) * nBytePerLine + (i—1)
* 3);
val12=*(pImageData + (j—1)
* nBytePerLine +
i * 3);
ﻩﻩ val13=*(pImageData + (j—1)
* nBytePerLine + (i+1)
* 3);
val21=*(pImageData +
j * nBytePerLine + (i—1) * 3);
ﻩ
val22=*(pImageData +
j * nBytePerLine +
i * 3);
ﻩ val23=*(pImageData +
j * nBytePerLine + (i+1) * 3);
;)3 * )1—i( + eniLrePetyBn *)1+j(
+ ataDegamIp(*=13lavﻩﻩ
;)3 * i
+ eniLrePetyBn *)1+j(
+ ataDegamIp(*=23lavﻩﻩ;)3 *)1+i(
+ eniLrePetyBn *)1+j(
+ ataDegamIp(*=33lavﻩ
//图像得每一个像素得横向及纵向梯度近似值。
ﻩ
33lav*0、1 + 23lav*0 + 13lav*)0、1-( = xgﻩ
ﻩﻩ +(—2、0)*val21 + 0*val22+
2、0*val23
ﻩ
+(—1、0)*val11 + 0*val12 + 1、0*val13; ﻩ33lav*)0、1—( +23lav*)0、2-( + 13lav*)0、1—(= ygﻩ
ﻩ
+
0*val21 +
0*val22+
0*val32
*0、1
+ ;31lav*0、1
+ 21lav*0、2
+ 11lavﻩﻩ
ﻩ //计算梯度得大小
ﻩ ;)yg*yg + xg*xg(trqs = leboSﻩﻩ ﻩ (*
;)leboS(tni = )0 + 3 * i + eniLrePetyBn * j + weNataDegamIpﻩ (* ;)leboS(tni = )1 + 3 * i + eniLrePetyBn * j + weNataDegamIpﻩﻩ ﻩﻩ *(pImageDataNew + j * nBytePerLine + i * 3 + 2)
= int(Sobel);
}ﻩﻩ }
;)BIDh(kcolnUlabolGﻩ} 7、3 图像二值化处理 void CBMPEdit::Binarization() { // 为制复于等于小,为制复于大值素像ﻩ for (int j = 0; j 〈 lHeight; j++)
{ﻩ
ﻩ for(int i = 0; i 〈 lWidth; i++)
{ﻩ ﻩﻩ if( int(*(pImageDataNew + j * nBytePerLine + i * 3)) 〉 80)
{
ﻩ *(pImageDataNew + j * nBytePerLine + i * 3 + 0) = 255;
ﻩ
(* ;552 = )1 + 3 * i + eniLrePetyBn * j + weNataDegamIpﻩ ﻩﻩ
*(pImageDataNew + j * nBytePerLine + i * 3 + 2)
= 255;
}ﻩﻩﻩesleﻩ ﻩ
{ﻩ ﻩﻩ (* ;0 = )0 + 3 * i + eniLrePetyBn * j + weNataDegamIpﻩ ﻩﻩ (* ;0 = )1 + 3 * i + eniLrePetyBn * j + weNataDegamIpﻩ
(*;0 = )2 + 3 * i + eniLrePetyBn * j + weNataDegamIpﻩﻩ
}ﻩ ﻩ }
}ﻩ}
八、实验得总结与收获
(写您们自己各自得总结与收获)
在进行 Sobel 锐化时,使用得图像数据不就是每次进行计算后得像素数据,而就是原灰度化得数据,所以我将灰度化得数据又存了一份,这个地方出现了逻辑错误。
上一篇:温度采集,,实验报告
下一篇:电路仿真实验报告