界完全为空白的情况处理为边界。也可以在程序中直接把该处理对应的代码去掉,其
余代码不需做任何改动,不足是增加了人工干预次数。当然,我们假定,在纵切时没
有刚好完全切在空白处的情况,否则程序会给出错误的结果。程序实现时,具体处理
方法如下:以 为例,首先测试碎片矩阵的大小,如果该碎片矩阵的右侧边界分量
各元素值的和与碎片的行数之差小于一个阀值,我们就认为该碎片为边缘碎片,停止
拼接。因为碎片已被处理为二值图像,在二值图像中,白色像素值为 ,黑色像素值
为 ,而边缘通常是纯白的,在考虑有极少杂色的情况下,我们给了一个阀值。左侧
边缘判定方法一样。
5.问题(5)的解决方案
对于既有纵切又有横切的图片,我们按如下思想进行拼接:利用纵切图片的拼接
思想首先将碎片拼接成多个横条图片,然后将每个横条图片的矩阵进行转置,最后再
次利用纵切拼接思想对横条图片进行拼接,拼接完毕后,将得到的最终矩阵进行转置,
最终得到整幅图片。在实现过程中,存在以下细节需要处理:
整个过程中需要多次调用纵切拼接函数将碎片拼接成多个横条图片,所以,需要在每
次成功拼接一个横条图片时将当前已参与拼接的碎片从剩余碎片中分离出来,这就需
要用到分离函数 。
6.问题(6)的解决方案
单面纵横切的算法和思想完全可以拓展到双面纵横切的情形,区别在于:在将所有
碎片拼接成横条形图片后,再进行横条拼接时要产生两幅图像。为了能生成两幅图像,
需要在单面纵横切拼接算法的基础上做以下处理:在拼接过程中要将参与拼接的图片
与剩余图片分离出来;从一个图片开始拼起,如果遇到两个边界都已经找到了,说明
第一个图片已经拼接完毕,然后再将剩余碎片拼接成另一面图像。因时间关系,我们
未能编程实现。
三、Matlab 编程实现拼接算法中的几个功能模块及调用关系
整个问题解决方案的实现代码分成以下几个功能模块:
() !"函数:将待处理碎片集‘附件 读入一个三维矩阵中,程序中设置的默
认读取路径是 "#$盘根目录,所以,需要把待拼碎片文件夹放在该路径下。
() !"函数:将待处理碎片集‘附件 读入一个三维矩阵中,其余同上。
() !"函数:将待处理碎片集‘附件 读入一个三维矩阵中,其余同上。
() !"函数:将待处理碎片集‘附件 读入一个三维矩阵中,其余同上。
() 函数:按右拼方法实现两个单面纵切碎片的拼接。
() 函数:按左拼方法实现两个单面纵切碎片的拼接。
(%) 函数:实现 序列的排序。
(&) 函数:求解两个碎片矩阵的边界列向量的信噪比值。