是本学期机器学习课的结课作业之一,为了保存所以上传到博客园里。选择的论文是特拉维夫大学的Roy Jevnisek、Shai Avidan的《Co-Occurrence Filter》。
我选择的论文是Co-Occurrence Filter。根据我研读完这篇论文后对这个滤波器的理解,我将这篇论文题目翻译为共生滤波器,原因在下面会讲到。为了流畅和文章结构考虑,应用课上学的知识进行分析会在文中结合进去,并不单独列出,但会对相关名词加粗。
一,阅读流程
由于是英文文献,首先对全文的翻译是必不可少的,由于是专业性较强的文献,我选择依靠自己的英语能力结合字典上对单个字词或词组的解释来进行阅读,也就是查字典翻译全文,这一阶段对一些名词的翻译依赖我对文章内容的初步印象和一部分的直觉,对滤波器名字的翻译是“共生”是由于搜索资料的时候搜到一些文章,提到了类似的滤波器并在中文中称之为共生滤波器。这一阶段既是翻译也是对文章的大致内容进行把握,一遍翻译下来之后主要关注到的几个关键词是:聚类(clustering),簇(cluster),引导图(guided map),窗口(window),共生(co-occurrence),边缘(edge)和边界线(boundary)。其中在翻译上有过较长纠结的是edge(边缘)和boundary(边界线)这一对近义词,最后是分别采纳了两者在牛津里的一种感觉更合适的释义。
然后就是通读自己翻译的文本,尤其是注重对第三部分的公式的理解。在这一阶段中主要提出并弄清楚了:共生滤波器定义式(4)为什么不能上下相消;共生矩阵C是怎么构造的;M是什么;共生矩阵C中单个元素的意义;3.2的分析内容的具体阐述;为什么要引入引导图以及引导图是如何构造的;软聚类的具体方式;共生滤波器是否具有移变性;图形2(c)中的白星为何会被模糊化;共生滤波器是如何依据内容保护边缘的;硬聚类和软聚类复杂度的计算验证。
问题没有包涵的其他部分,比如第二节的相关工作,第4节的结果对比,一方面包涵较多拓展知识,而与对共生滤波器本身的理解似乎没有太大的影响且耗费精力会很多,一方面进行简单理解的话在翻译过程中就基本完成了,所以就没有提出问题。
弄清楚上面罗列的问题之后就是报告的撰写。
二,部分名词解释和问题解释
由于名词解释牵扯到对问题的解答,所以我选择优先解释提出的问题,顺便在提到相关的有必要解释的名词时进行解释。
1.共生滤波器定义式(4)为什么不能上下相消:
因为定义式中累加的内容是权重与像素值Iq的乘积,这个像素值Iq是随q不断变化的所以不能相消。
2.共生矩阵C是怎么构造的、C中单个元素的意义:
从(7)式可以看到C的构造是依赖于像素点之间的距离的,特定像素值q的所有像素点与不相同另一特定像素值p的所有,两两依照那个人为设定了分母参数的类高斯函数计算出的值的累加和,就是共生矩阵C中一个元素的计算方法,其含义应当就是像素值p和像素值q在图像平面上的空间距离关系。
3.M是什么:
从(6)和(8)式M是C除以两种元素出现次数之积得到的,这一过程可以视作一个类似于归一化的过程,但同时也引入了像素值出现次数的影响,显然的是引入影响是这一操作的主要目的,那么M不妨被称为频数矩阵。
4. 3.2的分析内容的具体阐述:
首先,由于p=q时d(p,q)=0,所以所有的共生矩阵C的主对角线元素应当都是1,而当σ趋向于0时,e的次数趋向于负无穷大,那么p≠q时等式(7)的值就趋向于0,C和M就变为对角矩阵,那么此时共生滤波器就不会对输入图像产生平滑化的作用,因为只有像素值相同的像素会互相影响。而当参数σ趋向于正无穷时,在p≠q时e的次方趋向于0,那么C(a,b)记录的是h(a)*h(b),M就收敛于全1矩阵,CoF变为高斯滤波器(相当于在等式4中删去M的部分)。
在3.2中还涉及了两幅图像来进行更详细的说明。跳过双边滤波器的结果单独分析共生滤波器,在图形2的(c)中可以看到,图像内容的变化导致同样的共生滤波器(思考后认为“We emphasize that we did not change any of parameters of CoF at all.”应表达的是上下两张图使用的是完全相同的共生滤波器)产生了不一样的结果,只有单个白星的图片中共生滤波器并没有对图片产生影响,而在有白星阵列是整个阵列的白星就被模糊化了,从(d)的权重分配图里也可以看到,原本集中在白星上的权重向外发散了,由于白色增加导致白星间黑色区域的黑色程度降低是一个直接感觉上也可以接纳的事,但白色增加反而导致白星的白色度降低是一个直接感觉上难以理解的事,需要从共生滤波器的定义式上进行分析。
从定义式里可以看到,影响Jp的除了频数以外还有距离,诚然在白星阵列图中白色像素的频数增加了,但相应的白色像素的距离权重却大大减小了,因为依照距离分配权重的部分使用的是高斯函数,是有陡峭的非线性特征的,而频数增加只能带来线性的改变(因为计算频数的(8)式只是线性累加),所以才导致了白星阵列出现模糊化。在思考这里的时候隐约地感觉到一个想法:共生滤波器是平滑化图像中同一纹理特征内部、保留纹理特征之间区别的滤波器。
而在图形(3)中可以看到不同的采样区域对滤波结果的影响,理解之后来阐述的话就是:共生滤波器的滤波对象应当是与采样区域具有相似的颜色和纹理分布特征、并且至少是具有对应的想要平滑的色彩的,否则共生滤波器无法起到滤波作用(因为共生矩阵中根本没有对应颜色值与其他颜色值的关系),换言之,如果满足了以上条件,应当就可以将共生滤波器应用到不同的图像上。
5.为什么要引入引导图以及引导图是如何构造的:
引导图的引入原因,正是为了规避课上学到的一种情况——维数灾难,这种是试图用共生滤波器滤波彩色图像时1的。 而文章与课上讲到的维数灾难带来的影响也是一致的:计算量的爆炸和样本稀疏。首先要明确的是共生矩阵的边长——在灰度图像中——是图像中颜色值的种类数也就是255-0+1=256,而在彩色图像中要是试图应用同样的方法构造共生矩阵,就会面临边长变为256³的可怕情况,也就是说维数灾难的影响是直接表现在共生矩阵上的,那么相应的如果有办法减少共生矩阵的边长同时不损失太多的图像信息,就可以有效的规避维数灾难。文章中使用的方法就是聚类,并且演示中使用的是k-means聚类方法,但有微妙的不同的是,聚类的结果并不是将所有的像素值明确地划分给k个簇,而是为了在图像上得到k个色块的簇中心,也就是说k-means方法中的特征向量应当包含位置信息和色彩信息,而具体的划分则在后续处理中进行。引导图的构造主要的就是使用聚类方法得到k个色块簇中心,其他的都是下一步的内容——或许也不妨将整个引导式滤波器看作是一个完整的聚类过程——我认为这个划分方式主要的是个人的步骤的问题,并不影响理解。
6.硬聚类与软聚类以及它们的复杂度:
得到k个簇中心之后就是在为了适应于引导图而拓展等式(7)得到的等式(12)中进行应用,(12)式属于硬聚类方法,与(7)式对比来看其实并没有什么区别——只是将属于某个函数值改成了属于某簇以及输入的是簇而不是像素值,由于硬聚类将像素值分配给最近的簇中心,所以一个像素值只对应一个簇中心,如此一来就可以清楚地看到这个式子与(7)式并没有本质上的区别。对这个算法复杂度的分析涉及到窗口(window)的定义,文章中第一次出现这个词的地方如是说:“理论上,我们要对图像平面上的所有像素对进行取样。在测试中我们只考虑窗口中的像素对……”。据此推测,窗口就是建立共生矩阵的样本集,根据理解,在讨论硬聚类复杂度时说“n是图像中的像素个数,r是窗口的size”,这个size应当指的是样本集的大小也就是其中的像素个数,那么结合文中“这是因为在每个像素位置我们要计算r²对像素对的共生统计数据”的表述可以根据复杂度逆推实际的计算流程:对于整张图像上的每个像素点,我们先根据样本集的像素计算得到共生矩阵,然后计算该点受到的样本集/窗口中像素点带来的影响。也就是说,这个窗口应当是随着当前计算的像素点变化的,应当是取当前计算的像素点附近的r个像素点来计算共生矩阵,在r*r远小于n时,这个操作可以大大降低算法的时间复杂度。考虑到高斯函数图象在远离中心时急剧趋向于0的特性,这样的操作也是可以认为不会带来太大的误差的。
但硬聚类的分类方法会带来一定的误差(artifact),这个词虽然大约是人造物的意思,但结合文中它出现的地方(每次都是被消除的对象)以及在示例图像中它的表现(明显的令人感到不满意的图像),我决定叫它人工误差。这一误差的产生是因为相邻的像素可能会被分到不同的簇中导致原本应当平滑的部分出现崎岖。文中的这句解释很容易理解,就不赘述了。而为了减少乃至消除这种误差,引入了软聚类方法,软聚类也就是利用可能性(probability)这一概念放宽了某个像素值属于某个簇的条件,将原本[Tp=a][Tq=b]的部分改为Pr(p∈τa)Pr(q∈τb),这一改动导致每个对于每个图像中的像素点以及样本集中的像素点,都要与每个簇中心计算一次这个可能性,使复杂度变为原来的k ²倍。这就带来了很大的计算消耗,而为了减小这一消耗,文中采用了将Pr(p∈τ)视为一个核函数K(Ip, τ),再将之近似为K(τp, τ),将像素值与簇的关系近似为簇与簇之间的关系,最后导出等式(15)的软聚类共生矩阵计算式,这其中硬聚类C的复杂度已知,而前面的K(τa, τk1)* K(τb, τk2)由于出现了四种τ(也就是簇),也就是意味着要以O(1)复杂度得到这部分内容的话就要事先以O(k^4)的复杂度完成这个式子中所有τ组合的计算,所以简化后的软聚类复杂度为O(n*r²+k^4)。
7.共生滤波器是否具有移变性:
是的,因为定义式中存在有关图像内容的参数(Iq),同时从之前的分来看,对象的位置发生变化会直接导致其他像素值与之相对的位置关系(权重)变化,从而影响到输出。
8.共生滤波器是如何依据内容保护边缘的:
这要提起前面讲到的一句话:共生滤波器是平滑化图像中同一纹理特征内部、保留各纹理特征之间区别的滤波器。这句话也与介绍中提到的不同材质的分界线(boundaries between textures)相符合。从定义式中来看,用语言来表述,就是邻近的重复度高的像素值会对周围像素产生较大的影响,也就是说“聚集在一起”的某种颜色会导致周围的像素向这种颜色“靠拢”,表现在图像上就是图像变成由一块块在一定面积上颜色极为接近的色块构成。而色块之间的分界线,由于只是一条线,在频数上非常的小,就不大会对内容产生影响。从公式中来讲,应当是由于高斯函数的作用——毕竟实际图像中并不存在什么分界线而是表现为相邻的两个像素的值相差极大——所以其实是由于高斯函数在中心两侧快速趋向于0使不同的内容之间能够尽量地减少来自对面的干扰,当然,像素值急剧变化的相邻像素、它们的值的趋近应当是不可避免的,但至少这一趋近在我们宏观上看并不会很快的、在较短的迭代周期内显现出来并影响到滤波器的功能。那么对于内容、边缘、边界线这几个词也能顺势厘清含义了:内容,就颜色相近且聚集(距离小)或以相同颜色呈现固定纹理(频数高)的一块特定大小的区域(取决于滤波时选择的窗口);边缘,两侧像素值相差较大的线;分界线,不同内容之间的分割线。而共生矩阵的隐含着确定了内容/纹理与像素值的关系,对其进行了一定的划分。
上面这一段的结论也可以在后面的应用中得到一定程度上的验证。
三,略谈应用
应用中主要涉及了一些共生滤波器的性能测试、对比,拓展应用等。
图像五主要是为了展示窗口大小对效果的影响,根据先前的结论推断,窗口越大单个像素受到其他像素的加权影响越多,那就越容易趋同,在图像上也就是更加平滑,图像五的结果也是如此的。
图像6展示了不同量化选择的结果,可以看到的是硬聚类的图像中有明显的纹理,而软聚类的图像中就没有了,多花费k^4的时间复杂度显然是值得的。
图像七是两种迭代方式的对比,一种是学习得到一个共生矩阵后不再改变的I-CoF,一种是每次迭代都会重建一个共生矩阵的R-CoF,可以看到的是I-CoF的表现更加好,而R-CoF中则出现了不同色块区域混杂的现象。用我上面的解释来讲,就是I-CoF使用的是最开始构造的共生矩阵,那么其对于“内容”的划分也是依照最开始的图像而言的,并不会将不同“内容”混淆,但R-CoF每次滤波结束都更新了共生矩阵,每个共生矩阵都是依照最新迭代出的图像来确定各个“内容”的范围,但正如前面所说,不可避免的不同内容之间的边界线上像素值会趋同,而多次的迭代-重构共生矩阵的过程会加速这种趋同,最终导致不同内容混杂在一起。
在图像8中我们也可以验证先前的结论,虽然使用的是I-CoF,但豹纹的纹理和颜色是相近的,从迭代过程中我们可以看到豹纹较密集(频度高)的地方首先被平滑化,然后是较稀疏的地方,但豹纹身和树干、树叶之间始终分得很清楚,这一点从下面的收敛率曲线也可以看出来。
而在图像9中我们可以看到共生滤波器与其他平滑化方案的对比,共生滤波器的表现一如既往,如上面所说的一样,其他滤波器中我对于那个WLS比较感兴趣,因为它可以有效的分辨出斑马的黑白条纹而不将之平滑化,这一点很有意思,不过具体研究还是留待以后了。从这些对比中我们也可以看到共生滤波器这类滤波器的一种用途——用于图像处理中的一些艺术效果的实现。
而在图像10中我们可以看到一系列共生滤波器的可能的应用,包括应用到视频采集的图像中、代替选择性平滑化、保持物体彩色时将背景转为灰度图像等。这其中有四个概念:草稿(scribble)、标记(mask)、前景图与后景图。可以看到草稿在处理过程中是为了描述出一个物体的大致结构,然后通过共生滤波器可以由这个结构提取出一个物体大致形状的标记,然后就可以得到前景掩模,使用这个掩模就可以得到前景图(只滤波掩模覆盖部分)和背景图(滤波图像全部),这一操作就是共生滤波器的选择性平滑化,而通过结合前景图与背景图来用第(16)式进行分析可以得到一个更好的滤波图像。而为了得到一个物体为彩色背景为灰度的图像,也只要进行一下彩色图和灰度图结合前景图与后景图的加权平均即可。说来没什么太奥妙的数学技巧,但得到的结果委实很有意思。而图像(d)展示的在20帧之后的图片上用20帧前的图片信息构造的共生滤波器的结果也佐证了我上面说的“共生滤波器的滤波对象应当是与采样区域具有相似的颜色或纹理分布特征、并且至少是具有对应的想要平滑的色彩的,否则共生滤波器无法起到滤波作用(因为共生矩阵中根本没有对应颜色值与其他颜色值的关系),换言之,如果满足了以上条件,应当就可以将共生滤波器应用到不同的图像上”。
四,论文基本思想
这篇论文提出了一种边缘保护滤波器——共生滤波器,其主要的特征是基于图像内容而不是像素值的突变来判断需要保留的边缘从而对其他内容进行平滑化。全文包括了共生滤波器的介绍、相关研究的介绍、共生滤波器的明确定义(在灰度图像和彩色图像上的应用)、共生滤波器与其他滤波器的应用对比以及共生滤波器的一些应用、论文结论五部分。
而共生滤波器在彩色图像上的具体的应用过程如下:对给定的彩色图像我们首先聚类其像素值,使用量化图像T来计算硬量化共生矩阵Chard。这花费O(n*r²)。一旦我们有了Chard,我们使用簇距离来得到近似软聚类共生矩阵Mt。最后我们使用Mt来滤波原始图像I。对于灰度图像只要直接生成共生矩阵然后滤波即可。
这个滤波器显然的是一个无监督学习的滤波器,而它的学习过程的目的是寻找数据潜在的分布结构。
五,课程报告的讨论与感悟
对于共生滤波器的主要的两点理解就是前面的划线句了:
共生滤波器是平滑化图像中同一纹理特征内部、保留纹理特征之间区别的滤波器。
共生滤波器的滤波对象应当是与采样区域具有相似的颜色或纹理分布特征、并且至少是具有对应的想要平滑的色彩的,否则共生滤波器无法起到滤波作用(因为共生矩阵中根本没有对应颜色值与其他颜色值的关系),换言之,如果满足了以上条件,应当就可以将共生滤波器应用到不同的图像上。
英语基础对于阅读外文文献很重要,不过个人而言一边查字典一边阅读可以强迫我静下心来仔细地看,不漏过文章里的一字一句,这对理解这篇论文起到了很大的帮助,因为很多结论是依靠示例图像以及结合上下文推导出来的,包括一些确定共生滤波器性质的很重要的结论,文章里都没有。推导也牵扯到数学、图像处理、机器学习算法这些知识,数学的敏感度很重要,只有看到数字背后蕴藏的信息才能顺利地表达出算法的作用。文章中的图像帮了很大的忙,结合图像进行分析、结合图像对自己的结论提出问题,虽然很折磨人但对增进理解的帮助是非常大的。
这次文献阅读比较缺憾的一点就是由于时期特殊没有更多的精力去阅读其他的相关文献了,其他的一些滤波器的文献如果能更多地阅读的话应该能对共生滤波器以及图像处理有更深入的理解。而且也缺少时间编程实现这个滤波器,如果能用实际模型来调试的话就可以更好地验证自己的结论了,而不是只能对着论文中有限的例图绞尽脑汁。
不过总的来讲,这篇报告应该基本把这篇文章主要的重点都弄清楚了,我认为自己这次文献阅读的结果还是较完整的。
文章中出现的等式等期末考考完我还记得的话再捣鼓(躺)。