这个小作品是我的数字图像处理课程设计,应用基本的图像处理知识与MATLAB的基本脚本编程,实现一个简单的找茬软件。软件实现过程中使用到的找茬游戏图片来源有“梦幻找茬”、“图图找茬”。如有兴趣的人可以亲自玩下这两个游戏。本程序主要目的是练习数字图像处理的基本知识、数学形态学以及MATLAB语言。由于时间与能力的有限,并没有做的很好,各位大神小踩,谢谢。
1、所需知识matlab基本语言;
matlab GUI实现;
数字图像处理基本知识;
数学形态学基本知识;
2、算法函数实现过程
1)图像获取分割
原本的课程设计要求就是要求使用的是游戏界面截图,使用的图片就是存在两边的图,两边的图是存在差异区域的,首先要做的就是将图像简单进行竖直平分分割。
2)计算图像偏移裁剪
由于一般的截图左右两边的图并不能保证对称,所以我们需要计算利用图片的25%中心区域来计算左右两边图的偏移量,再使用这偏移量来裁剪使得两边的图片尽可能重合。这样查找差异区域的时候就不会出现额外因偏移出现的错误标定。由于我测试的图像使用的是800*500的图,逐个像素点计算,共需要比较的像素点个数大概是800*500*0.25*20=2000 000次,所以一般的电脑都需要3分钟。
3)三通道不相同区域提取
原本课程设计的要求是用彩色转灰度后再提取出不同的区域,但是转换得到的灰度的茬的差异有些存在的不明显,所以最后我选择使用红蓝绿三通道来分离出茬的区域。利用原有的颜色差异来分离出茬的区域成效明显好于灰度图像提取。我这里是直接使用MATLAB内置有的imabsdiff()函数来直接获取各个通道不同的区域。然后将各个通道不同的区域相加起来,再使用imopen(),imclose()函数进行开闭运算。实际的图像看起来是一致的颜色,其实存在有一定的差值,甚至是较大的毛刺,所以必须是使用开闭运算来消除毛刺与噪声。
4)矩形框标定显示
为了更明显的显示出茬的位置,最后使用一个矩形标定的函数来绘制出茬的区域。首先是使用MATLAB自带的工具函数bwlabel()获取茬区域的连通区域,获得到数据有标定标定好的连通区域与连通区域个数。 再用regionprops()获取连通区域信息,得到的信息有面积"area"、矩形框位置"boundingbox"、连通区域中心"central"。得到这些数据,就可以很好的使用矩形框定函数框定茬的位置。
5)MATLAB GUI实现
MATLAB的GUI还是比较简单的,初学者需要注意的就只有
a.初始化函数
b.使用句柄传参、或者设置全局变量传参
c.按键响应事件,实际就是调用的函数
MATLAB的所有显示都可以是控件显示的,如 :set(handles.radiobutton1,'visible','off'); 就是设置单选框的隐藏不显示,涉及到的参数键与值都可以在GUI绘制的界面的属性中找到。最后一件事情就是MATLAB的GUI实现之后可以打包成可执行文件,但是需要使用的电脑需要安装编译电脑上的MCRInstaller.exe程序。所以MATLAB的GUI程序几乎是不可能脱离MATLAB运行,因为GUI打包几乎都涉及到MATLAB内置的画图函数,所以目的主机必须要拥有MATLAB整个运行库才可以运行GUI。