作者slanla (slanla)
看板Prob_Solve
标题Re: [问题] 二维的字串比对问题
时间Tue Jul 18 19:36:06 2006
※ 引述《windows2k (KERORO军曹)》之铭言:
: 以下这个方法通常只是理论上可以实行, 做起来就囧了
: 可以把二维的字串看作是影像,
: 原来的问题就变成从一张影像当中, 找到一致性的 pattern
: 定义 SSE = Sum of Square Error,
: SSE = sigma (Image[x+i][y+j] - pattern[i][j]) ^ 2
: i = 1...p, j = 1...q
: p和 q 是 pattern的高和宽 x,y 可以看作是搜索的起点
: 只要找到 SSE = 0 的区块, 就表示两个部份是一样的
: 我们可以将 SSE 重新改写成
: SSE = sigma (Image[x+i][y+j] ) ^ 2 + sigma (pattern[i][j]) ^ 2
: i, j i,j
: - 2* sigma Image[x+i][y+j] * pattern[i][j]
: i,j
: 前面两项可以经由预处理做掉.
: 後面 Convolution的部份,可以交由 FFT 先将资料转至频率空间
: H[i] = F[i] * G[i]
: 再经由 Inverser FFT 转回来得到每个点的convolution.
: 不过, 这没有比较快, 加上可能有浮点误差的问题存在
: 只是提供一种不同的作法, 听听就算了 XD
恩恩..好像有听老师教过
褶积的方法..
不过好像有另外一个比较简单..
相关系数法(Normalized Cross-Correlation)
假设A为目标影像(小影像)、B为搜寻影像(大影像)
而要在B影像中找出与A最有相关性的位置
其公式如
http://140.116.80.230/ncc.jpg
以下面为例:
A B
12 512
34 234
442
首先先计算
A的平均=(1+2+3+4)/4=2.5
(1,1) :
B'影像:
51
23
B'的平均=(5+1+2+3)/4=
2.75
分子=(1-2.5)*(
5-
2.75)+(2-2.5)*(
1-
2.75)+(3-2.5)*(
2-
2.75)+(4-2.5)*(
3-
2.75) =-2.5
分母=( ((1-2.5)^2 +(2-2.5)^2 +(3-2.5)^2 +(4-2.5)^2 )*
((
5-
2.75)^2+(
1-
2.75)^2+(
2-
2.75)^2+(
3-
2.75)^2) ) ^ (0.5) =6.614
→C=分子/分母=-0.377964473
(1,2) :
B'影像:
12
34
B'的平均=(1+2+3+4)/4=
2.5
分子=(1-2.5)*(
1-
2.5)+(2-2.5)*(
2-
2.5)+(3-2.5)*(
3-
2.5)+(4-2.5)*(
4-
2.5) =5
分母=( ((1-2.5)^2+(2-2.5)^2+(3-2.5)^2+(4-2.5)^2 )*
((
1-
2.5)^2+(
2-
2.5)^2+(
3-
2.5)^2+(
4-
2.5)^2) ) ^ (0.5) =5
→C=分子/分母=1→
C=1表示此处两影像100%相同,C=-1代表者100%不同,同如底片
(2,1) :
B'影像:
23
44
B'的平均=(2+3+4+4)/4=3.25
分子=(1-2.5)*(
2-
3.25)+(2-2.5)*(
3-
3.25)+(3-2.5)*(
4-
3.25)+(4-2.5)*(
4-
3.25) =3.5
分母=( ((1-2.5)^2+(2-2.5)^2+(3-2.5)^2+(4-2.5)^2 )*
((
2-
3.25)^2+(
3-
3.25)^2+(
4-
3.25)^2+(
4-
3.25)^2) ) ^ (0.5) =3.708
→C=分子/分母=0.943879807
(2,2) :
B'影像:
34
42
B'的平均=(3+4+4+2)/4=3.25
分子=(1-2.5)*(
3-
3.25)+(2-2.5)*(
4-
3.25)+(3-2.5)*(
4-
3.25)+(4-2.5)*(
2-
3.25) =3.5
分母=( ((1-2.5)^2+(2-2.5)^2+(3-2.5)^2+(4-2.5)^2 )*
((
3-
3.25)^2+(
4-
3.25)^2+(
4-
3.25)^2+(
2-
3.25)^2) ) ^ (0.5) =3.708
→C=分子/分母=-0.404519917
-----------------------------------------------------------------------------
上述是影像匹配的方法...不过如果用在英文字母我想应该也是ok的~~
把字母视为Ascii一样可以处理....
呼..打好久..不知道有没有打错~"~
有错..请大大多多包含了^^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.80.230
1F:推 march20:呕, 我头晕了 @@ 07/18 20:03
2F:推 march20:不过这是篇认真的好文章 :P 07/18 20:03
3F:推 PsMonkey:其实我根本看不懂,不过还是来帮推辛苦的作者 07/18 23:16