パズルのピースの角を見つけます -- opencv フィールド と image-processing フィールド と bufferedimage フィールド と javacv フィールド と imagej フィールド 関連 問題

Finding the corners of a puzzle piece












1
vote

問題

日本語

シナリオ:

スキャンパズルとコンピュータが(Javaアプリケーション)を解決してみましょう。

私はジグソーパズルピースの角を見つけるための方法を探しています。

ここに画像の説明を入力し、

私はフレームワークを使用してこの問題にアプローチすることができます場合、私は知りません。私はコーナーを見つけるためにここにテンプレートのようなものを使用することはできますか?それとも私が自分でアルゴリズムを実装する必要がありますか?

私はまっすぐの位置に単一の部品を持参する必要があります。私は両方の角を持ってしたい場合は、私はストレートのレベルに画像を回転させるために必要な角度を計算することができます。 私は、特定のフレームワークの中でこのような機能を必要としません。

<強い>(オプション)のマイアプローチでした。 自分自身(propably極めてunperformant)によってアルゴリズムを実装します。

  1. 全て白画素が1と0とすべての着色/黒画素に割り当てられている2次元配列を作成します。
  2. ここから1の画素のための2DアレイANS検索トラフ
  3. ループ、彼のすべての隣接1を検索
  4. 50未満の1に隣接ある場合、この「ピクセル」を無視して進行(走査エラー)
  5. 1隣接50以上である場合は
  6. は、それがパズルのピース(なし走査エラー)です。作品を終了し、何もスキャンエラーが表示されないはずの新鮮な2Dアレイにそれらのすべてをコピーします。
  7. 新鮮なアレイでは、
  8. 、角度...
  9. を検索
英語

Scenario:

Scan a puzzle and let a computer solve it (Java application).

I'm searching for a way to find the corners of a jigsaw puzzle piece.

enter image description here

I don't know if I can approach this problem using a framework. Can I use something like a template here to find the corners? Or do I have to implement an algorithm by myself?

I need to bring a single piece into a straight position. If I'd got both corners, I could calculate the needed angle to rotate the image to a straight level. I don't need a function like this in a specific framework.

(Optional) My approach was: Implementing an algorithm by myself (propably extremely unperformant).

  1. Create a 2D-array where all the white pixels are allocated with 0 and all the colored/black pixels with 1.
  2. loop trough the 2D-array ans search for a pixel with 1. From here, search all his neighboring 1.
  3. If there are less than 50 neighboring 1, ignore this "pixel" and proceed (scanning error)
  4. If there are more than 50 neighboring 1, it is a puzzle piece (and no scanning error). Finish the piece and copy all of them into a fresh 2D-array where no scanning errors should appear.
  5. In the fresh array, search for the angles...
</div
              
         
         

回答リスト

0
 
vote

OpenCVの専門家ではありませんが、私は次のようにハリスコーナー検出器を使って行っていました:

<事前> <コード> Bar7

と識別されたコーナーの周りにいくつかの円を描きます。

画像の説明を入力しますここで

 

I'm no expert with OpenCV but I had a go with a Harris Corner Detector as follows:

//////////////////////////////////////////////////////////////////////////////// // Compile and run under OSX with: // clang++ -O3 $(pkg-config --cflags --libs opencv) harris.cpp -o harris && ./harris //////////////////////////////////////////////////////////////////////////////// #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <stdio.h> #include <stdlib.h>  using namespace cv; using namespace std;  int thresh = 200;  int main( ) {     Mat src,gray;     // Load image and convert to greyscale     src=imread("jigsaw.jpg",1);      cvtColor(src,gray,CV_BGR2GRAY);     Mat dst,dst_norm,dst_norm_scaled;     dst=Mat::zeros(src.size(),CV_32FC1);      // Detect corners     cornerHarris(gray,dst,7,5,0.05,BORDER_DEFAULT);      // Normalize     normalize(dst,dst_norm,0,255,NORM_MINMAX,CV_32FC1,Mat());     convertScaleAbs(dst_norm,dst_norm_scaled);      // Draw circles around corners     for(int j = 0;j<dst_norm.rows;j++){        for(int i = 0;i<dst_norm.cols;i++){           if((int)dst_norm.at<float>(j,i)>thresh){              circle(dst_norm_scaled,Point(i,j),10,Scalar(255,255,255),1,8,0);           }        }     }      // Display result    //imwrite("result.png",dst_norm_scaled);    namedWindow("corners_window",CV_WINDOW_AUTOSIZE);    imshow("corners_window",dst_norm_scaled);      waitKey(0);     return(0); } 

And drew some circles around the identified corners for fun.

enter image description here

</div
 
 

関連する質問

1  ImageJを使用した強度の測定  ( Measuring intensity using imagej ) 
ImageJを用いて画像の特定の領域における蛍光の強度を測定する必要があります。強度を測定するために以下のステップを思い付きました。それは正しいようですが、私の質問は - &gtです。私たちは実際に次のステップを使って強度を正しく測定しているか、それとも誤っ...

4  imagej - ファイルを保存せずに画像フォーマットを変換します  ( Imagej convert image format without saving file ) 
ImageJ APIを使用して、24ビットTIFF画像を8ビットJPGに変換しています。 変換後、私はこれらの画像に対して他の処理をする必要があります。 私はこれを作りました: <事前> <コード> ImagePlus img = IJ.openImage(...

0  JPEG圧縮(Python)を使用したマルチチャンネル(N> 3)の画像を保存する  ( Saving multi channel n 3 images with jpeg compression python ) 
私は3つ以上のチャンネルを持ついくつかの生物医学的な画像を使っています。 画像はかなり大きいので、JPEG圧縮でピラミダルTIFFファイルとして保存することをお勧めします。これは他の圧縮方式(例えば、LZW、Deflate)と比較して一桁圧縮比を与える。 現在...

6  ImageJ画像の明るさとコントラスト  ( Imagej brightness contrast over a stack of images ) 
imagej(a .TIF画像のスタック、約130フレーム)のデータセットセットを通して、そして私はデータセットに問題があります。それは一連の顕微鏡画像であり、各フレームは前のものよりも約3~4マイクロメートルの平面である。私がデータセットに深くなるにつれて...

1  奇妙なファイルImageJとの動作を保存します  ( Strange file save behavior with imagej ) 
imagejスクリプトを色に書き、一連の白黒画像をマージしました。スクリプトは、汎用色付きの画像とマージされた色付きの画像の両方を保存します。デバッグモードで実行してスクリプトを実行すると、すべてが美しく機能します。ただし、実際に走るとき、それは時折、結果と...

3  ImageJオーバーレイスタック  ( Imagej overlay stacks ) 
基本的に、私が達成しようとしていることは、表示されているかどうかの層で、別のスタックとオーバーレイすることです。 2D画像をオーバーレイすることが可能であるが、スタックをオーバーレイする機能はあります。 私は、3D UCTスキャンを含む.RAWフォーマットにス...

0  ImageJステータスバー座標表示  ( Imagej status bar coordinate display ) 
imagejのステータスバーに表示される桁数を増やす方法を知っていますか?ピクセル座標が表示されている場合、これは通常問題ではありませんが、スケールがスケールファクタに応じて2桁の2桁のみに適用されると、1桁だけがもうありません。 ...

0  ImageJ(Java)のコードとして文字列を実行します。  ( Execute string as code in imagejjava ) 
コードは文字列にあります。 <事前> <コード> String str = "IJ.run("FJ Edges", "");"; strが実行された場合、対応する内容が実行されます。 ...

0  ImageJ(Java)の1つのプロットのベクトル  ( Vectors in one plot in imagej java ) 
imagejにプラグインを書き、いくつかのアイデアが必要です。 スタック内のすべての画像にプロットを生成するプラグインがあります。そのため、スタックに4つの画像がある場合は、ベクトルから4個のプロットを生成します。 しかし、私は4曲線で1つのプロットである必...

2  画像処理のためのJavaでOpenCVを読み込むエラー  ( Error loading opencv in java for image processing ) 
私はJava(Eclipse、Mac OSX)でOpenCVをロードする上で問題に直面しています。私はJavaに新しい、マイメインターゲットはイメージ処理です。私はいくつかの例をオンラインでチェックしました....私は実際にクエリを少し持っています: 0...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有