数字图形处理 实验 图像的平滑与锐化
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在以上例子中,如果以上的角度Θ等于零,即代表图像该处拥有纵向边缘,左方较右方暗。
三、实验内容:
1.在主菜单中添加图像增强的菜单项,并添加相应的图像平滑与图像锐化两个子菜单项。
2.利用类向导添加相应的消息响应函数。实现图像的平滑与锐化操作。
3.打开一幅图像,先进行平滑,然后再进行锐化操作。观察图像的变化情况。
1.邻域平均法的思想是用像素及其指定邻域内像素的平均值或加权平均值作为该像素的新值,以便去除突变的像素点,从而滤除一定的噪声。邻域平均法的数学含义可用下式表示:
(1)
上式中: 是以 为中心的邻域像素值; 是对每个邻域像素的加权系数或模板系数; 是加权系数的个数或称为模板大小。邻域平均法中常用的模板是:
(1)
(2)
式中, , 分别为函数 在迭代点 处的梯度和梯度的模;两式中 均为最优步长因子,各自分别通过一维极小化 和 。
按照梯度法迭代公式(1)或(2)进行若干次一维搜索,每次迭代的初始点取上次迭代的终点,即可使迭代点逐步逼近目标函数的极小点。其迭代的终止条件可采用点距准则或梯度准则,即当 或 时终止迭代。
h=m_DibHead->biHeight;
long i,j;
unsigned char *lpdst=new unsigned char [w*h];
memset(lpdst,0,w*h);
int abs[9]={0};
for(i=1;i<h-1;i++)
for(j=1;j<w-1;j++)
{
int m,n;
3.通过变量轮换法、共轭方向法等的讨论,我们知道对多维无约束问题优化总是将其转化为在一系列选定方向 进行一维搜索,使目标函数值步步降低直至逼近目标函数极小点,而 方向的选择与迭代速度、计算效率关系很大。人们利用函数在其负梯度方向函数值下降最快这一局部性质,将n维无约束极小化问题转化为一系列沿目标函数负梯度方向一维搜索寻优,这就成为梯度法的基本构想。据此我们将无约束优化迭代的通式 中的搜索方向 取为负梯度向量或单位负梯度向量,即可分别得到两种表达形式的梯度法迭代公式
实现代码如下:
平滑中的邻域平均法:
void CMingView::OnLinyupingjun()
{
// TODO: Add your command handler code here
long w,h;
w=m_DibHead->biWidth;
h=m_DibHead->biHeight;
long i,j;
4. 该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像,其公式如下:
Sobel算子
图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。
然后可用以下公式计算梯度方向。
*(m_Image+i*w+j-1)+*(m_Image+i*w+j)+*(m_Image+i*w+j+1)+
*(m_Image+i*w+w+j-1)+*(m_Image+i*w+w+j)+*(m_Image+i*w+w+j+1);
temp/=9;
*(lpdst+i*w+j)=(unsigned char)(temp);
for(m=-3/2;m<=3/2;m++)
for(n=-3/2;n<=3/2;n++)
{
abs[(m+3/2)*3+(n+3/2)]=*(m_Image+(i+m)*w+j+n);
}
mysort(abs,9);
*(lpdst+i*w+j)=abs[3*3/2];
}
memcpy(m_Image,lpdst,w*h);
Invalidate();
}
锐化中的梯度法:
void CMingView::OnTidu()
{
// TODO: Add your command handler code here
(2)
为了解决邻域平均法造成的图像模糊问题,采用阈值法(又叫做超限邻域平均法,如果某个像素的灰度值大于其邻域像素的平均值,且达到一定水平,则判断该像素为噪声,继而用邻域像素的均值取代这一像素值;否则,认为该像素不是噪声点,不予取代),给定阈值 :
(3)
(3)式中, 是原始含噪声图像, 是由(1)式计算的平均值, 滤波后的像素值。
2.中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是去某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为2*2,3*3区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。
unsigned char *lpdst=new unsigned char [w*h];
memset(lpdst,0,w*h);
for(i=1;i<h-1;i++)
for(j=1;j<h-1;j+&#ge+i*w-w+j-1)+*(m_Image+i*w-w+j)+*(m_Image+i*w-w+j+1)+
}
memcpy(m_Image,lpdst,w*h);
Invalidate();
delete []lpdst;
}
平滑中的中值滤波法:
void CMingView::OnZhongzhi()
{
// TODO: Add your command handler code here
long w,h;
w=m_DibHead->biWidth;
XXXXXXXX大学(数字图形处理)实验报告
实验名称图像的平滑与锐化
实验时间年月日
专业姓名学号
预习操作座位号
教师签名总评
一、实验目的:
1.了解图像平滑的邻域平均和中值滤波以及锐化的梯度法和Sobel法的基本思想;
2.掌握图像平滑的邻域平均和中值滤波以及锐化的梯度法和Sobel法的基本步骤;
二、实验原理:
三、实验内容:
1.在主菜单中添加图像增强的菜单项,并添加相应的图像平滑与图像锐化两个子菜单项。
2.利用类向导添加相应的消息响应函数。实现图像的平滑与锐化操作。
3.打开一幅图像,先进行平滑,然后再进行锐化操作。观察图像的变化情况。
1.邻域平均法的思想是用像素及其指定邻域内像素的平均值或加权平均值作为该像素的新值,以便去除突变的像素点,从而滤除一定的噪声。邻域平均法的数学含义可用下式表示:
(1)
上式中: 是以 为中心的邻域像素值; 是对每个邻域像素的加权系数或模板系数; 是加权系数的个数或称为模板大小。邻域平均法中常用的模板是:
(1)
(2)
式中, , 分别为函数 在迭代点 处的梯度和梯度的模;两式中 均为最优步长因子,各自分别通过一维极小化 和 。
按照梯度法迭代公式(1)或(2)进行若干次一维搜索,每次迭代的初始点取上次迭代的终点,即可使迭代点逐步逼近目标函数的极小点。其迭代的终止条件可采用点距准则或梯度准则,即当 或 时终止迭代。
h=m_DibHead->biHeight;
long i,j;
unsigned char *lpdst=new unsigned char [w*h];
memset(lpdst,0,w*h);
int abs[9]={0};
for(i=1;i<h-1;i++)
for(j=1;j<w-1;j++)
{
int m,n;
3.通过变量轮换法、共轭方向法等的讨论,我们知道对多维无约束问题优化总是将其转化为在一系列选定方向 进行一维搜索,使目标函数值步步降低直至逼近目标函数极小点,而 方向的选择与迭代速度、计算效率关系很大。人们利用函数在其负梯度方向函数值下降最快这一局部性质,将n维无约束极小化问题转化为一系列沿目标函数负梯度方向一维搜索寻优,这就成为梯度法的基本构想。据此我们将无约束优化迭代的通式 中的搜索方向 取为负梯度向量或单位负梯度向量,即可分别得到两种表达形式的梯度法迭代公式
实现代码如下:
平滑中的邻域平均法:
void CMingView::OnLinyupingjun()
{
// TODO: Add your command handler code here
long w,h;
w=m_DibHead->biWidth;
h=m_DibHead->biHeight;
long i,j;
4. 该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像,其公式如下:
Sobel算子
图像的每一个像素的横向及纵向梯度近似值可用以下的公式结合,来计算梯度的大小。
然后可用以下公式计算梯度方向。
*(m_Image+i*w+j-1)+*(m_Image+i*w+j)+*(m_Image+i*w+j+1)+
*(m_Image+i*w+w+j-1)+*(m_Image+i*w+w+j)+*(m_Image+i*w+w+j+1);
temp/=9;
*(lpdst+i*w+j)=(unsigned char)(temp);
for(m=-3/2;m<=3/2;m++)
for(n=-3/2;n<=3/2;n++)
{
abs[(m+3/2)*3+(n+3/2)]=*(m_Image+(i+m)*w+j+n);
}
mysort(abs,9);
*(lpdst+i*w+j)=abs[3*3/2];
}
memcpy(m_Image,lpdst,w*h);
Invalidate();
}
锐化中的梯度法:
void CMingView::OnTidu()
{
// TODO: Add your command handler code here
(2)
为了解决邻域平均法造成的图像模糊问题,采用阈值法(又叫做超限邻域平均法,如果某个像素的灰度值大于其邻域像素的平均值,且达到一定水平,则判断该像素为噪声,继而用邻域像素的均值取代这一像素值;否则,认为该像素不是噪声点,不予取代),给定阈值 :
(3)
(3)式中, 是原始含噪声图像, 是由(1)式计算的平均值, 滤波后的像素值。
2.中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。方法是去某种结构的二维滑动模板,将板内像素按照像素值的大小进行排序,生成单调上升(或下降)的为二维数据序列。二维中值滤波输出为g(x,y)=med{f(x-k,y-l),(k,l∈W)} ,其中,f(x,y),g(x,y)分别为原始图像和处理后图像。W为二维模板,通常为2*2,3*3区域,也可以是不同的的形状,如线状,圆形,十字形,圆环形等。
unsigned char *lpdst=new unsigned char [w*h];
memset(lpdst,0,w*h);
for(i=1;i<h-1;i++)
for(j=1;j<h-1;j+&#ge+i*w-w+j-1)+*(m_Image+i*w-w+j)+*(m_Image+i*w-w+j+1)+
}
memcpy(m_Image,lpdst,w*h);
Invalidate();
delete []lpdst;
}
平滑中的中值滤波法:
void CMingView::OnZhongzhi()
{
// TODO: Add your command handler code here
long w,h;
w=m_DibHead->biWidth;
XXXXXXXX大学(数字图形处理)实验报告
实验名称图像的平滑与锐化
实验时间年月日
专业姓名学号
预习操作座位号
教师签名总评
一、实验目的:
1.了解图像平滑的邻域平均和中值滤波以及锐化的梯度法和Sobel法的基本思想;
2.掌握图像平滑的邻域平均和中值滤波以及锐化的梯度法和Sobel法的基本步骤;
二、实验原理: