私はいくつかのタイプの画像オブジェクトを持つ画像データベースの作成を任されました。各画像は、2次元のピクセル配列で構成されています。 MatchPattern(イメージサブイメージ、イメージイメージ):この関数は、サブイメージがイメージに何回繰り返して表示されるかを表す整数を返します。次のように大きな2D配列の中で、より小さい2D配列のマッチングを探すにはどうすればよいですか?
私が書いたコードは次のとおりです。
public int MatchPattern(Image subimage, Image image) {
if(image.getClass().equals(subimage.getClass())){
int numOfMatches = 0;
int imgWidth = image.getWidth();
int imgHeight = image.getHeight();
int subimgWidth = subimage.getWidth();
int subimgHeight = subimage.getHeight();
if (imgWidth < subimgWidth || imgHeight < subimgHeight)
return 0;
for (int i = 0; i < imgHeight; i++) {
for (int j = 0; j < imgWidth; j++) {
int subHeightIndex = 0;
int subWidthIndex = 0;
Pixel imagePix = image.getImg()[i][j];
Pixel subimgPix = subimage.getImg()[subHeightIndex][subWidthIndex];
if((imagePix.compareTo(subimgPix)==0) && ((imgWidth-j)>=subimgWidth) && ((imgHeight-i)>=subimgHeight)){
boolean matchFlag = true;
for (int k = 0; k < subimgHeight; k++) {
if(matchFlag == false)
break;
for (int l = 0; l < subimgWidth; l++) {
matchFlag = (image.getImg()[i+k][j+l] == subimage.getImg()[k][l]);
if (matchFlag == false)
break;
}
}
if(matchFlag == true)
numOfMatches++;
}
}
}
return numOfMatches;
}
return 0;
私はメソッドを実行するたびにしかし、それは常に試合のNUMを返す0に等しい誰もが正しい方向に私を指すことができますか? ありがとうございます。
は、なぜあなたは 'if'文の中System.out.println''簡単な操作を行うと、コントロールが内部で起こっているかどうかを確認していません?基本的には、デバッガを通って制御がどこに行き、どこが期待通りにならないのかを確認し、なぜこれが...?最終的には、問題を絞り込んでその原因につきます。 –
同じ問題について[post](http://stackoverflow.com/questions/297762/find-known-sub-image-in-larger-image)を参照しているとします。より良いアルゴリズムを見つけることが役立つかもしれません。この[post](http://stackoverflow.com/questions/12598818/finding-a-picture-in-a-picture-with-java)とこの[example](http://www.dreamincode.net/フォーラム/トピック/ 157963-finding-a-sub-image-in-a-larger-image /) –
デバッガの使用方法を学ぶ –