这几天看了HARALICK在1973年写的这篇论文,学到了挺多知识。
这篇文章对于物体纹理特征提取是奠基性的,非常赞!!
我觉得最主要学到了两个方面知识。
第一,是提取纹理。
文中介绍了(中文大家都叫灰度共生矩阵),比如下面是我的4*4图片,有且只有4种灰度
0 | 0 | 1 | 1 |
0 | 0 | 1 | 1 |
0 | 2 | 2 | 2 |
2 | 2 | 3 | 3 |
那么我就有4个方向的灰度共生矩阵,(很好理解)分别是水平,垂直,45度和90度。
比如下面是我的水平方向灰度共生矩阵
4 | 2 | 1 | 0 |
2 | 4 | 0 | 0 |
1 | 0 | 6 | 1 |
0 | 0 | 1 | 2 |
那么上面的数字是怎么来的呢?比如第2行第1列我们用(1,0)表示,这里不写成(2,1)因为灰度是0-3. (1,0)的值为什么是2,代表什么呢?
(1,0)代表左边是灰度1,右边是灰度0的这样的有几种,看原图,数一下是不是2个?在第一行第三列和第三行第一列。
那么(0,0),(1,1)为什么是4呢?先看(0,0),好像只有2个,要记住,这是对称矩阵,(0,0),(1,1),(2,2)这种还要乘2的,
所以,对角线是2的倍数。
我再画出90度的帮助理解~~
6 | 0 | 2 | 0 |
0 | 4 | 2 | 0 |
2 | 2 | 2 | 2 |
0 | 0 | 2 | 0 |
提取灰度共生矩阵是非常简单的事情~~
哦,对了,我们上面的例子都是灰度相邻,作者在文中还定义了一个d,不过一般都取1。那么d代表什么呢?
如果d取2,角度是0度,那么(1,2)就表示灰度1在灰度2左边,并且距离为2这样一种灰度共生矩阵提取方法。
好了,我们现在有了灰度共生矩阵,下面就可以提取纹理了。
作者在文中一共定义了28种纹理,其实也可以当作14种。
我在这里随便举一种吧,处理前,我们要先对灰度共生矩阵作归一化。原矩阵为M(i,j),归一化后为P(i,j),原矩阵所有数字之和为sum.
P(i,j) = M(i,j)/sum
我们所有的计算都是基于P矩阵的。
有一种纹理叫二阶角矩
计算方法是f = SUM(P(i)(j)^2),这是最好计算的一种,然后我们有4个方向的值,平均一下,就提取出一种特征了,另外的特征计算方法在论文种都有。
假设我们有天空,绿地,沙滩三种分类,还有training set 和 data set.
下面我们就先作训练,我们已经有了训练集了,接下来要怎么办呢?
我也是最近刚接触,会的就是logistic回归模型和Fisher分类算法,他们一开始都是基于两类分类的,当然也都能作用于多类。
如果大家不会logistic,可以看下斯坦福的机器学习课程,Fisher分类是1936年提出来的,需要对矩阵比较熟悉。
如果有不懂的地方,大家可以一起探讨^^
我再多说一点,如果用logistic作多类,可以这样做。
假如我们有A,B,C三类,分别拿 A,BC B,AC C,AB去做。
比如A,BC 那么我们就把A设为1,BC类别为0,这样我们就有h1(x),同理有h2(x),h3(x)
新的一个物体a过来时,分别算一算h1,h2,h3 哪个值高就算哪个分类