1.几种算子图像边缘提取:
程序代码如下:
运行结果:
原图为一堆苹果(彩图),各算子处理后的边缘提取图:
分水岭算法实现:
a.直接对图像进行分水岭算法处理
代码如下:(原图还是上题一堆苹果)
运行结果如右图:
很明显,属于过度分割了。
下面有改进算法:
b.改进算法代码如下:
实现包括下列步骤:
(1)读图像。
读入图像
(2)对比度最大化。
注意到图像中有许多彼此连通的
不同大小的对象。
为使通过watershed变换找到的低
谷数目最小,我们使感兴趣的对象的对比度达到最
大。
对比度增强的一个常用的技术是综合应用top—
hat和bottom—hat变换。
top—hat变换定义为原图像和它的开之差。
图像的
开是一与特定结构元素匹配的图像前景部分的集合。
bottom—hat变换定义为在原图像和它的闭之间的
差。
图像的闭是一与特定结构元素匹配的图像背景
的集合。
通用的结构元素是正方形,长方形,圆盘,菱
形,球和线。
既然图像中我们感兴趣的目标对象看
起来像圆盘,我们用strel函数建立一个半径为15个
像素的圆盘形结构元素。
这个圆盘尺度是图像中的
目标对象的平均半径的一个估计。
(3)图像相加减。
为使目标对象与分隔它们的间隙之
间的对比达到最大,用“原图top—hat图像+bottom
—hat图像”得到增强的结果图。
(
4)转换感兴趣的对象。
调用watershed变换找出图像
的亮度”低谷”,把imcomplement作用
增强过的图像上,将感兴趣的目标对象转换为亮度低谷,得到增强图的补图。
(5)检测亮度低谷。
对所得补图运用imextendedmin函数检测低于某特别阈值的所有亮度低谷。
imextendedmin函数的输出是一个二值(逻辑值)图像。
二值图像中重要的是区域的位置而非区域的大小。
用imimposemin函数把补图改为只含有那些由imtendedmin函数找到的低谷,并将低谷的像素值变为O(8位图像可能的深谷)。
(6)watershed分割。
通过watershed变换,可找出来所有含有强加给最小值的区域。
用watershed函数实现watershed分割。
watershed函数返回一个标记矩阵,它含有对应于watershed区域的非负数。
凡未落入任何watershed区域的像素均被赋予像素值0。
用
label2rgb把一个标记矩阵变为一幅图像。
运行结果:
对于改进后的算法,过度分割的现象不明显或者根本觉察不出。