HC算法出自程明明老师的论文:
Global Contrast based Salient Region Detection
这个论文一共提到了两种算法,分别是HC与RC。
HC仅仅是考虑了颜色特征,而RC考虑了空间特征。我们上一篇文章介绍的LC算法就是仅考虑了颜色特征。
HC算法和LC算法本质上是没有什么区别的, 但上篇LC算法我们给出代码处理的是灰度图,而HC算法是在LAB颜色空间处理的彩色图。
RC以后再说。
此外我建了一个微信交流群,号主我比较菜,不过群里有厉害的哈哈,欢迎大家进群一起学习昂。
加微信【yanshilin216】备注【加群】。
HC算法原理和LC有很多类似之处。最基本的算法思路可以说是完全相同:
该方法只用到了颜色特征。一个像素的显著值是通过与图像中的所有其它像素的色差来定义的。比如方程1:
其中D(Ik,Ii)是空间Lab中两个像素的颜色距离度量,上式经过扩展像素等级变为方程2:
其中N为图像I中的像素数量。
由于测量没考虑空间关系,同样颜色值的像素具有相同的显著值。从具有相同颜色值的像素被组合在一起的角度重新整理方程2,我们就得到每个颜色的显著值如下方程3:
其中,Cl是像素Ik中的颜色值,n是不同像素颜色的数量,fi是图像I中像素颜色Cj出现的频率。
但是按这个写代码同样有很大的时间复杂度,所以添加了两个优化方法以及一个辅助方法。
两个优化:
缩减颜色空间。三通道图像可能的像素值为255255255个。这就导致无法使用直方图来进行加速程序,因此我们将每个通道量化为12个颜色,这样就是121212个可能的像素值。
此外,算法还从图像中筛选出了可以覆盖图像95%像素的颜色值,剩余的5%的颜色值用直方图中的临近像素替代,从而进一步减少可能的颜色值。这样就苦于应用直方图加速了。
一个辅助:
为了达到更好的效果,可以进行一步平滑操作。
一些相似的颜色可能被数量化为不同的值。为了减少这类由于随机性给显著结果引入的噪声,采取一套平滑程序来改善每个颜色的显著值。用相似颜色的显著值加权平均来代替每个颜色(以Lab*距离测量)的显著值。选择m=n/4个最近的颜色作为代表来改善颜色c的显著值,如方程:
算法步骤:
算法实现:
这个算法一共200来行,,就不贴这儿有碍观瞻了吧,放微信群了。
看看算法效果。
今天就到这里啦,微信搜索【Opencv视觉实践】,对【计算机视觉/机器视觉】算法和软件开发感兴趣的小伙伴可以一起来学习呀。
关注后 后台回复
【电子书资源】可以领取10G计算机视觉/软件开发相关电子书
【手撕算法代码】可以领取手撕算法系列专栏的所有代码和PDF版论文
【加群】可以加入我们的视觉算法靓仔群~