HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1020
7522つの画像間の相似率を出すには4未解決


752

リンク

2007/10/20(Sat) 07:53:39|NO.11772

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



この記事に返信する


eller

リンク

2007/10/20(Sat) 08:45:19|NO.11776

HSP開発wikiに掲載されているスクリプトですね。
http://hspwiki.tm.land.to/?As

このスクリプトは#module〜#globalで囲まれていないので、そのまま使うことはできません。
スクリプトのはじめに#moduleを、終りに#globalを記述することで利用できるようになるはずです。
// 使い方例(同じ大きさの画像を比較)
#module // 上記モジュールをここにコピー&ペースト #global title "比較元画像情報" dialog "bmp;*.jpg", 16, "比較元画像" if stat == 0 : end picload refstr img_w = ginfo_winx : img_h = ginfo_winy dialog "bmp;*.jpg", 16, "比較先画像" if stat == 0 : end screen 1 : title "比較先画像" picload refstr if ( img_w != ginfo_winx ) | ( img_h != ginfo_winy ) { dialog "画像の大きさが違います", 1 end } a1 = 0, 0, 0 : a2 = 1, 0, 0 dialog strf( "%3.2f%%", imgh( img_w, img_h, a1, a2 ) * 100 ) stop
ただ、画像の大きさや判定の基準となる座標(判定範囲の左上隅の座標)を自分で指定しなければならないので、cvmatchのように使うのは難しいかも知れません……。
ループを使って調べる方法もなくはないですが、動作が遅くなり使いものにならないと思います。



n

リンク

2007/10/20(Sat) 13:14:35|NO.11795

HSP開発wikiにつながりませんが。



n

リンク

2007/10/20(Sat) 13:16:23|NO.11796

スクリプトは小文字の<PRE>〜</PRE>で囲んでください。
スクリプトは小文字の
で囲んでください。
スクリプトは小文字の
で囲んでください。



n

リンク

2007/10/20(Sat) 13:17:56|NO.11797

>を>としたら>として認識されるけど、
さらにそこから
がタグと認識されるのはおかしい。
いい加減小文字で<PRE></PRE>と書けるように直してほしい。



ONION software Copyright 1997-2021(c) All rights reserved.