图像处理软件工具开发与实现

2022-09-10 版权声明 我要投稿

随着计算机科学技术的发展, 图像处理技术的应用越来越广泛。我们知道计算机图像处理是利用计算机对原来存在物体的映像进行分析处理, 然后再现图像。为了明确我们的软件在目标、功能、性能方面的要求及任务, 编写了这份需求分析报告。我的任务是开发并实现一个图像处理软件工具。

目前, 图形图像处理技术已经广泛应用在各个领域, 虽然目前的图形图像处理软件工具也不少, 但是对于一般的普通用户和业余的爱好者来说, 能够迅速学会并熟练的并不多, 针对这方面的不足, 我开发了能使普通用户和业余爱好者迅速入门的图形图像处理软件工具, 希望对初学图形图像处理的用户有一定的帮助。

1图像数据类

图像数据类里的数据属性定义为二级指针, 这样存取数据时可按宽和高存取, 比较方便, 每次打开和新建一个图像时动态分配大小, 对于一幅图像, 我记录的是它的每一个像素, 因此, 显示时也是一个像素、一个像素地显示出来。由于是使用MFC来显示图像, MFC中要用CDC类进行显示, 而CDC类每显示一次需要一定的时间。虽然时间很短, 但即使一幅小图像也至少有几万个像素, 故累积起来的时间就比较多了。

所以这里存在一个问题, 就是每做一点小小的改动, 都会需要很长的等待时间, 用户显然不可能接受这一事实, 因此必须改进。从上面的描述我们可知:做一点小的改动也会需要很长的时间, 是因为不管改动多大, 都会将所有的数据显示一次, 而有些数据根本没变, 是不需要重新显示的, 但我也把它重新显示了。如此看来, 改进的方法出来了, 就是改动了哪些数据就只显示修改过的那部分数据。这样一来, 问题的确解决了。但是, 要让显示时知道哪些数据改动了, 也有一个问题, 如果是在改动时作一个标记, 显示时查询这个标记的话, 不但会增加空间, 还会增加时间, 因为每去查询一次也是需要时间的, 所以不能用这种方式。如果在改动时就通知显示的类, 让他把改动的地方重显示, 这样就不会像刚才那么复杂。但这样一来, 每个像素更新时都会通知显示类更新一次, 虽然与前面相比, 程序员的工作少了一些, 但实际工作却没怎么减少。因为显示的类要频繁地更新, 而且显示类必须对图像数据类的内部结构 (至少是内部数据组成) 要了如指掌, 才能对每一个数据更新显示做到精确控制, 这样的话, 两者间的联系就增强了。 而我想要的是显示独立于数据, 数据不依赖于显示, 这在总体设计时已经明确的。

前面所描述的还有一点值得注意, 就是前面的问题是因为CDC类每次只显示一个像素引起的。如果一次就把所有的数据显示出来的话, 显然时间就会节省不少。要达到这样的目的, 必须在图像数据类里定义一个CDC类能一次显示完毕的数据类型, 而CDC类本身就是可以一次显示, 所以我在图像数据类里面加入了一个CDC类, 它是为显示提供的专用接口。以后, 对数据的每次处理, 都将及时去更新这个作为显示接口的CDC类。这样就解决了显示等待时间长这一问题, 而且没有增加数据与显示之间的联系。

2基本功能的相关算法

基本功能中画笔工具能画任意的线段, 把画任意的线段和画直线统一起来, 这样就会减少工作量。画笔时我记录下按下鼠标时的点和以后每次移动的点 (鼠标移动和按下在VC里都会有相应的消息响应函数, 而且函数的参数就是点的坐标) , 把他们按顺序连起来, 这样就实现了画任意的线, 而把两点连起来实际上就是画一条直线。在众多的直线扫描算法里, 选择了只对整型进行加减运算的中点扫描算法。画曲线时选择的是三次贝塞尔曲线, 算法使用了公式Pir (t) = (1-t) Pir- 1 (t) +t Pi+1r-1 (t) 计算出t=1/2时的点, 再把P0, P01, P02, P03和P03, P12, P21P3分别作为两个三次贝塞尔曲线, 再求出他们的t=1/2时的点, 如此递归。直到P0和P3为相邻的两点。填充算法采用的是种子填充算法。

3几何变换的相关算法

图像的几何变换包括图像的平移、旋转等操作。如果熟悉矩阵运算, 那么实现这些几何变换是非常容易的。但是, 我更关心的是逆运算, 因为我想知道变换后每个像素的颜色, 而几何变换前后像素的颜色是不会发生变化的。另外, 若图像变换后超出了显示范围, 直接将超出部分截取。

4图像效果处理的相关算法

系统中图像效果处理包括图像数字化、图像增强、边缘提取、消除噪声 (平滑) 、复原、锐化以及图像素描效果。图像的平滑和锐化是两个恰恰相反的操作:图像的平滑就是滤掉高频分量, 从而达到减少图像噪声的目的, 又称为低通滤波。与其相反图像的锐化则是增强高频分量来减少图像中的模糊, 因此又称为高通滤波。通常, 图像的去噪声处理采用的是超限邻域平均法, 它既去除突然变化的点, 滤掉噪声, 也在一定程度上减低了图像的模糊。图像的锐化处理采用的是拉普拉斯模板, 它的作法是:先将自身与周围的8个像素相减, 表示自身与周围像素的差别, 再将这个差别加上自身作为新像素的灰度。

我查阅了图像效果处理的相关书籍, 都没有找到有关素描效果的说明, 所以我仔细分析了Photo Shop中的素描效果。根据分析, 素描效果是全由线条构成的图像, 故素描效果的图像应该是一幅二值化图像, 但他还包含了灰度级的信息, 而这一灰度的信息并不是像素本身所体现出来的, 而是因为线条的密度不同, 给人造成灰度不同的感觉。由此可见, 要实现素描效果, 必须满足三个条件:一、图像要能体现灰度信息;二、要实现图像二值化;三、图像要由线条构成。

5整合测试

编码完成以后, 按照给定的函数接口开始写系统源代码。 编码期间, 我将图像处理功能函数挂接到系统上进行代码的整合。代码整合完成以后, 进行系统的调试。由于一开始就统一了各功能函数的接口, 所以在系统调试方面, 我没有花太多的时间。最后, 测试系统是否达到预期的要求:界面友好, 使用方便;实现了基本的画图操作;集成了图像的几何变换和几种常用的图像处理功能;实现图像处理速度快, 效果好。

摘要:我开发的图像处理工具软件界面友好, 简单易学。该工具的功能较画图板强大但不及目前广泛流行的Photoshop, 但是它比Photoshop易入门、一学就会, 是图像处理初学者的合适选择。该工具为初学者提供了基本的画图功能, 图像几何变换功能和效果处理功能。根据实际情况, 选用的开发工具是Visual C++。

关键词:图像处理软件,画图,几何变换,效果处理

参考文献

[1] 王汝传.计算机图形学.人民邮电出版社, 2003.

[2] 孙家广.计算机图形学.清华大学出版社, 1998.

[3] 陈纯.计算机图像处理技术与算法.清华大学出版社, 2003.

[4] 贾永红.计算机图像处理与分析.武汉大学出版社, 2001.

[5] 吴维聪.计算机图像处理.海科学技术出版社, 1989.

[6] 傅德胜.图形图像处理学.东南大学出版社大学, 2002.

[7] 容观澳.计算机图像处理.清华大学出版社, 2000.

[8] 艾海舟, 武勃, 等.图像处理、分析与机器视觉.人民邮电出版社, 2003.

[9] 李英军, 马晓星, 蔡敏, 刘建中, 等.设计模式.机械工业出版社, 2000.

上一篇:术后早期炎性肠梗阻52例临床分析下一篇:浅析电动汽车充电服务的商业运营模式