2つの画像間の相似率を出したく、以下のようなモジュールを見つけたのですが、うまく動きません。サイトにはソースのみで、これ以上説明がありませんでした。
cvmatchに重みを付けられる様なもの(ある閾値以上で同じ画像とする)が出来ればと思っております。このモジュールを利用、または他の方法で実現する手段はないでしょうか。よろしくお願い致します。
・二つの画像を比較し総似率を返す
//比較除外色の情報をすべてクリア
#deffunc imghclsdel
dim IMGHCOLOR,1:return
// 比較する対象から除外する色を指定
// imghclsadd R,G,B
#deffunc imghclsadd int p1, int p2, int p3
if IMGHCOLOR=0{sdim IMGHCOLOR,64,0:IMGHCOLOR.(length(IMGHCOLOR)-1)=""+p1+","+p2+","+p3
}else{:IMGHCOLOR.(length(IMGHCOLOR))=""+p1+","+p2+","+p3:}:return
//imgh 比較範囲X, 比較範囲Y, 比較元画像情報が入った変数,比較先画像情報が入った変数
//比較元画像変数名 = 画像があるバッファID, 左上X、左上Y
//画像の相似率が%で帰ります。
#defcfunc imgh int p1,int p2,array p3, array p4
s2=ginfo(3):s8=0:gsel p3:mref s1,66:s11=ginfo_winx:s12=ginfo_winy:gsel p4:mref s9,66:s13=ginfo_winx
s14=ginfo_winy:gsel s2:if (""+p3(0)+","+p3(1)+","+p3(2))!IMGHROOT{IMGHROOT=""+p3(0)+","+p3(1)+","+p3(2)
s4=0:dim IMGHROOTTOP,p1+1,p2+1,3:gsel p3(0):repeat p2:s3=0:repeat p1:s10=((s12-1-(s4+p3(2)))*s11+(s3+p3(1)))*3
IMGHROOTTOP.s3.s4.0=peek(s1,s10+2):IMGHROOTTOP.s3.s4.1=peek(s1,s10+1):IMGHROOTTOP.s3.s4.2=peek(s1,s10)
s3+:loop:s4+:loop}gsel p4(0):s4=0:s5=1:repeat p2:s3=0:repeat p1:s7=0:foreach IMGHCOLOR
if (""+IMGHROOTTOP.s3.s4.0+","+IMGHROOTTOP.s3.s4.1+","+IMGHROOTTOP.s3.s4.2)=IMGHCOLOR.cnt{s7=1}loop
if s7!1{s10=((s14-1-(s4+p4(2)))*s13+(s3+p4(1)))*3:s15=peek(s9,s10+2):s16=peek(s9,s10+1):s17=peek(s9,s10)
s7=0:foreach IMGHCOLOR:if (""+s15+","+s16+","+s17)=IMGHCOLOR(cnt){s7=1}loop:if s7!1{
if (IMGHROOTTOP(s3,s4,0)=s15)&(IMGHROOTTOP(s3,s4,1)=s16)&(IMGHROOTTOP(s3,s4,2)=s17){s8+}else{s5=0} }else{
s8+} }else{s8+}s3+:loop:s4+:loop:gsel s2:s8=double(s8)/double((p1*p2)):return s8