C# テンプレートマッチングについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
DUO

C# テンプレートマッチングについて

#1

投稿記事 by DUO » 14年前

こんにちは。

C#でテンプレートマッチングを作成しているんですがうまくいきません。

9x9の格子状の表の中に1~9の数字がランダムに入っています。
□□□         421
□□□  中身→   376
□□□         958

表は315x315のサイズで2値化処理済みのbmpです。
テンプレートは64x64のサイズで1,2,3~9とそれぞれ2値化しbmpであります。

マッチングを行う下記の部分でうまくいってないせいかマッチングできません。。

表の高さ、幅をHEIGHT,WIDTH、
テンプレートの高さ、幅をTHEGHT,TWIDTH、にしてあります。

それぞれに高さと幅の数値は入力済みです。

このコードの前にテンプレートのピクセルをa[i,j]に、
表のピクセルをb[i,j]に入力してあります。

説明が下手ですがご指導よろしくお願いします。
また、わからない情報が多いと思いますので質問してください。

Q1.真ん中処理部分
Q2.該当箇所の赤枠表示

コード:

for(j=0;j<HEIGHT-THEIGHT;j++)
      for(i=0;i<WIDTH-TWIDTH;i++){
         //マッチング検出
         match_number=0;
         for(n=0;n<THEIGHT;n++)
            for(m=0;m<TWIDTH;m++){
               //処理部分
              if(a[i,j]==b[i,j])//←ここがうまくいってないとおもわれる・・・
               //処理部分
            }
         //一致したピクセルが770個以上
         if(match_number>770) 
         //ここで一致した部分に赤枠で囲う処理をしたい。
      }
よろしくお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: C# テンプレートマッチングについて

#2

投稿記事 by h2so5 » 14年前

if(a[i,j]==b[i,j])
この部分だけでは分かりません。
ソースをもっと具体的に書いてください。
DUO さんが書きました: 9x9の格子状の表の中に1~9の数字がランダムに入っています。
□□□         421
□□□  中身→   376
□□□         958

表は315x315のサイズで2値化処理済みのbmpです。
表が二つあるということでしょうか?
b[i,j]に入っているのはどちらの表ですか?

DUO

Re: C# テンプレートマッチングについて

#3

投稿記事 by DUO » 14年前

h2so5 さんが書きました:if(a[i,j]==b[i,j])
この部分だけでは分かりません。
ソースをもっと具体的に書いてください。
DUO さんが書きました: 9x9の格子状の表の中に1~9の数字がランダムに入っています。
□□□         421
□□□  中身→   376
□□□         958

表は315x315のサイズで2値化処理済みのbmpです。
表が二つあるということでしょうか?
b[i,j]に入っているのはどちらの表ですか?
表は1つで中身が
421
376
958
となっています。
a[i,j]にはテンプレートのピクセル値が、b[i,j]には表のピクセル値が入っています。
上記コードの前に

コード:

for (int j = 0; j < HEGHT; j++)
            
                for (int i = 0; i < WIDTH; i++)
                {
         RGB = (iRed + iGreen + iBlue) / 3;
                     if (RGB < 128)
                    {
                        a[i, j] = 0;
                     }
                    else 
                    {
                        a[i, j] = 1;}
}
というコードがテンプレートおよび表(表の場合a[i,j]がb[i,j]になる)にも存在し、
しきい値の128以下なら黒、128以上なら白という判断をここでさせています。

そして最初の文中にある

コード:

for(j=0;j<HEIGHT-THEIGHT;j++)
      for(i=0;i<WIDTH-TWIDTH;i++){
         //マッチング検出
         match_number=0;
         for(n=0;n<THEIGHT;n++)
            for(m=0;m<TWIDTH;m++){
               //処理部分
              if(a[i,j]==b[i,j])//←ここがうまくいってないとおもわれる・・・
               //処理部分
            }
         //一致したピクセルが770個以上
         if(match_number>770) 
         //ここで一致した部分に赤枠で囲う処理をしたい。
      }
で比較しようとしているところです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: C# テンプレートマッチングについて

#4

投稿記事 by h2so5 » 14年前

表の中身は
421
376
958
という並びの「画像」という意味でしょうか?
だとすると「9x9の格子状の表」が何なのか分からないのですが。

そしてなぜ if(a[i,j]==b[i,j]) の部分で上手くいっていないと考えているのか
教えてください。

もう一度書きますが、これだけのコードでは判断できません。
できるだけもっと詳しいコードを載せてください。

閉鎖

“C言語何でも質問掲示板” へ戻る