数字图像处理课程设计.docx

上传人:b****5 文档编号:3717909 上传时间:2022-11-24 格式:DOCX 页数:14 大小:1.40MB
下载 相关 举报
数字图像处理课程设计.docx_第1页
第1页 / 共14页
数字图像处理课程设计.docx_第2页
第2页 / 共14页
数字图像处理课程设计.docx_第3页
第3页 / 共14页
数字图像处理课程设计.docx_第4页
第4页 / 共14页
数字图像处理课程设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数字图像处理课程设计.docx

《数字图像处理课程设计.docx》由会员分享,可在线阅读,更多相关《数字图像处理课程设计.docx(14页珍藏版)》请在冰豆网上搜索。

数字图像处理课程设计.docx

数字图像处理课程设计

数字图像处理课程设计

——最大值、最小值滤波图像增强

实验目的:

熟悉了解、学习C、C++语言;

学习VC++在图像处理中的应用;

深入了解图像的增强处理;

深入了解用最大值滤波、最小值滤波增强处理图像的基本知识;

掌握图像处理的基本方法掌握最大值、最小值滤波的程序编写及其它图像增强处理的程序编写的了解。

实验仪器:

TestVC软件,计算机,photoshop软件。

实验原理:

图像增强就是采用某些技术把质量低的图像进行计算机处理,有选择地加强或抑制图像中的某些信息,改善图像质量,提高人或机器对图像的分析与判读能力。

图像的增强处理方法一共有两种,分别是空间域方法和频域方法。

空间域方法主要是运用空间滤波对图像增强进行处理,所谓滤波,就是过滤掉图像中的一些“成分”,对数字图像的直接滤波就是空间滤波(相对于频率域滤波)。

空间滤波主要包括平均滤波、中值滤波、最大值滤波、最小值滤波等。

空间滤波是通过空间滤波器实现。

空间滤波器就是在一个邻域(如包围该像素的一个小矩形区域)里,对该邻域包围的像素的进行操作。

空间滤波器包括线性滤波器如:

线性操作,如加、减、乘运算;非线性滤波器如:

非线性操作。

空间滤波器又叫模板,类似于矩阵,大小有3*3模板、5*5模板、9*9模板等。

如:

9*9模板:

 

空间滤波对图像的增强处理主要是通过模板运算实现的,按照指定的模板进行运算。

如右图,是对模板运算的

的图示解释。

 

模版运算实现的主要步骤:

1、将模板在图中遍历,并将模板中心与图中某个像素位置重合;

2、将模板上的各个系数与模板下的各对应像素的灰度值相乘;

3、将所有乘积相加;

4、将上述运算结果赋给模板中心位置的像素。

最大值滤波、最小值滤波的原理:

设输出的图像为g(x,y),

(s-1,t-1)

(s-1,t)

(s-1,t+1)

(s,t-1)

(s,t)

(s,t+1)

(s+1,t-1)

(s+1,t)

(s+1,t+1)

 

最大值滤波

最小值滤波

实验内容:

1,在XX图库中寻找一张图片:

2,在Photoshop中,将图片改为宽300像素,高300像素的图片,模式保存为RGB,8位/通道,格式为bmp,保存在D盘中,命名为:

myimge;

3,打开TestVC.dsw工程文件,再打开mytest.cpp文件,在指定位置输入程序

4,编译,调试,运行。

实验结果:

一、利用for循环编写代码;

1.1最大值滤波for循环主要代码:

voidCTestVCView:

:

test(BYTEinimage[300][300],BYTEoutimage[300][300])

{

inti,j,max;

for(i=1;i<300;i++)

{

for(j=1;j<300;j++)

{

max=inimage[1000][1000];

if(inimage[i][j]>max)

{

max=inimage[i][j];

}

outimage[i][j]=max;

}

}

}

1.2代码截图:

1.3输入图像(左),输出图像(右);

2.1最小值滤波for循环主要代码;

voidCTestVCView:

:

test(BYTEinimage[300][300],BYTEoutimage[300][300])

{

inti,j,min;

for(i=1;i<300;i++)

{

for(j=1;j<300;j++)

{

min=inimage[1000][1000];

if(inimage[i][j]

{

min=inimage[i][j];

}

outimage[i][j]=min;

}

}

}

2.2代码截图;

 

2.3实验的输入图像如下图左,处理图像如下图右:

二、利用for、、、if判断语句进行编码;

1.1最大值滤波的主要编码;

voidCTestVCView:

:

test(BYTEinimage[300][300],BYTEoutimage[300][300])

{

inti,j,max;

for(i=1;i<300;i++)

{

for(j=1;j<300;j++)

{

max=inimage[i][j];

if(inimage[i-1][j]>max)

{

max=inimage[i-1][j];

}

if(inimage[i-1][j-1]>max)

{

max=inimage[i-1][j-1];

}

if(inimage[i-1][j+1]>max)

{

max=inimage[i-1][j+1];

}

if(inimage[i][j-1]>max)

{

max=inimage[i][j-1];

}

if(inimage[i][j+1]>max)

{

max=inimage[i][j+1];

}

if(inimage[i+1][j-1]>max)

{

max=inimage[i+1][j-1];

}

if(inimage[i+1][j]>max)

{

max=inimage[i+1][j];

}

if(inimage[i+1][j+1]>max)

{

max=inimage[i+1][j+1];

}

outimage[i][j]=max;

}

}

}

1.2编码截图:

1.3实验输入图像(左)输出图像(右)

2.1最小值滤波的主要编码;

voidCTestVCView:

:

test(BYTEinimage[300][300],BYTEoutimage[300][300])

{

inti,j,min;

for(i=1;i<300;i++)

{

for(j=1;j<300;j++)

{

min=inimage[i][j];

if(inimage[i-1][j]

{

min=inimage[i-1][j];

}

if(inimage[i-1][j-1]

{

min=inimage[i-1][j-1];

}

if(inimage[i-1][j+1]

{

min=inimage[i-1][j+1];

}

if(inimage[i][j-1]

{

min=inimage[i][j-1];

}

if(inimage[i][j+1]

{

min=inimage[i][j+1];

}

if(inimage[i+1][j-1]

{

min=inimage[i+1][j-1];

}

if(inimage[i+1][j]

{

min=inimage[i+1][j];

}

if(inimage[i+1][j+1]

{

min=inimage[i+1][j+1];

}

outimage[i][j]=min;

}

}

}

2.2编码截图;

2.3,实验输入图像(左)输出图像(右)

(s-1,t-1)

(s-1,t)

(s-1,t+1)

(s,t-1)

(s,t)

(s,t+1)

(s+1,t-1)

(s+1,t)

(s+1,t+1)

编码分析

如右图,可以令图像中某一象素的位置坐标为(s,t),其邻域象素的坐标位置就如右图所示,因为在图像中象素的坐标位置为二维数组,若用I,j代表s,t,则这九个点在程序输入是的代码为

inimage[i-1][j]

inimage[i-1][j-1]

inimage[i-1][j+1]

inimage[i][j-1]

inimage[i][j]

inimage[i][j+1]

inimage[i+1][j-1]

inimage[i+1][j]

inimage[i+1][j+1]

在最大值滤波中,只需要找出这九个位置的象素中灰度值最大的象素,即若赋值(s,t)位置的象素灰度值最大(max=inimage[i][j]),只需要将另外八个位置象素的灰度值与其进行大小比较,若大于inimage[i][j],则将其灰度值赋值于max,再将其他位置的象素灰度值与其进行比较,直至找出这九个位置象素中灰度值最大的那个象素,然后将其灰度值代替中心象素(s,t)位置的象素灰度值。

在最小值滤波中,只需要找出这九个位置象素中灰度值最小的象素,若赋值(s,t)位置的象素灰度值最小(min=inimage[i][[j]),只需要将另外八个位置象素的灰度值与其进行大小比较,若小于inimage[i][j],则将其灰度值赋值于min,再将其他位置的象素灰度值与其进行比较,直至找这九个位置象素中灰度值最小的那个象素,然后再将其灰度值代替中心象素(s,t)位置的象素位置。

在编码过程中无论是使用for循环语句还是使用for、、、if,其编码原理都大致如此,只不过for循环语句比较简单,但是for循环的语句中,因为在所有的数组中,其灰度值的范围是是[1300],所以在对最大值max进行赋值时一定要赋予一个最小的数,目的就是为了让图像中所有象素的灰度值都大于max,这样就可以让所有象素与max进行循环比较;对最小值min进行赋值时一定要赋予一个最大的数,目的就是为了让图像中所有象素的灰度值都小于min,这样就可以让所有的象素与min进行循环比较。

用For、、、if语句进行编码虽然麻烦,但是读起来比较易懂,先把九个像素位置的灰度值表示出来,然后用所有象素的灰度值与其中一个象素灰度值逐依进行比较,直至得出最大灰度值象素或最小灰度值象素。

 

实验收获:

在这次小学期中,我对C语言有了更加深入地学习,而且初步对VC++有了了解,将程序设计与图像处理很好的结合,在之前一直用PS等作图软件对图像进行处理的基础上,也简单的学会了用C语言、VC++等程序对图像进行数字化处理。

这次小学期的主要任务是对图像进行增强处理,主要是运用最大值滤波、最小值滤波对图像进行操作。

通过学习,不仅深入了解了图像增强处理的方法和技巧,而且也对滤波有了更深入的了解,尤其是最大值滤波、最小值滤波、中值滤波、均值滤波等。

在利用程序编码对其进行操作时,也对程序编码有了更深入的了解。

 

附注:

编码执行流程图,见下页。

 

程序执行流程图

(以for循环最小

值滤波为例)

 

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1