BoofCV-簡単な説明
したがって、BoofCVは、純粋なJavaで記述されたオープンソースのコンピュータービジョンライブラリです。 内部で使用されるアルゴリズムは最適化されており、実践が示すように、場合によっては速度はC ++ opencvの実装に劣りません。 ライブラリの主な機能:
•ビデオカメラとWebカメラを使用します。
•3Dコンピュータービジョン。
•フィルター(ぼかし、グラデーション)、ノイズクリーニング(ウェーブレットを使用)。
•二値化、モルフォロジー演算。
•境界線を強調する(Canny、Sobel)。
•興味のあるポイントを検索します。
•線、セグメント、長方形の検索。
•ステレオ画像。
さらに、ライブラリにはコンピュータービジョンで使用されるより多くの関数が含まれています。 ライブラリは非常に簡単に接続されます-公式サイトからソースをダウンロードして自分でビルドするか、既に収集されたjarファイルをダウンロードしてプロジェクトに接続するだけです。
実験のために、次の写真を撮ってください。
まず、ガウスぼかしを試してみましょう。
このような画像を取得するには、BlurImageOps.gaussian関数を使用します。
//以下、画像はImageUInt8型の元の画像です
ImageUInt8 blurred = new ImageUInt8(image.width,image.height) ImageUInt8 blurred = new ImageUInt8(image.width,image.height); BlurImageOps.gaussian(image,blurred,-1,5,null);
次に、元の画像にノイズを追加してフィルタリングします。
ノイズを追加および削除します。
Random rand = new Random(234); ImageUInt8noisy = image.clone(); GeneralizedImageOps.addGaussian(noisy,rand,20,0,255); ImageUInt8denoised = new ImageFloat32(ImageUInt8.width, ImageUInt8.height); int numLevels = 4; WaveletDenoiseFilter< ImageUInt8> denoiser = FactoryImageDenoise.waveletBayes(ImageUInt8.class,numLevels); denoiser.process(noisy,denoised);
境界を強調する:
コード:
私は
mageUInt8 canny = new ImageUInt8(image.width,image.height); //Canny DetectEdgeContour<ImageUInt8> simple = FactoryDetectEdgeContour.canny(30,200,false,ImageUInt8.class,ImageSInt16.class); simple.process(image); List<List<Point2D_I32>> edges = simple.getContours(); for( List<Point2D_I32> l : edges ) { for( Point2D_I32 p : l ) { canny.set(px,py, 255); } }
画像の二値化:
コード:
ImageUInt8 binary = new ImageUInt8(image.width,image.height); float mean = PixelMath.sum(image)/(image.width*image.height); ThresholdImageOps.threshold(image, binary,mean,false);
二値化された画像マークアップ:
コード:
ImageSInt32 blobs = new ImageSInt32(image.width, image.height); int numBlobs = BinaryImageOps.labelBlobs4(binary,blobs);
興味のあるポイントを検索:
記事を煩雑にしないために、コードには例を挙げません。例はマニュアルにあります。
そして、ここで論理的な疑問が生じます-Androidはどこにありますか? Androidでライブラリを使用するために、Android形式からBoofCVライブラリ形式へ、またはその逆に変換するためのメソッドを含むConvertBitmapクラスがあります。
たとえば、次のように:
Bitmap map = BitmapFactory.decodeResource(getResources(), R.drawable.car5); ImageUInt8 image = ConvertBitmap.bitmapToGray(map, (ImageUInt8)null, null);
結論:
もちろん、これはライブラリのすべての機能のほんの一部です。 BoofCVの機能によると、もちろんopencvのようなモンスターには負けます。 ただし、BoofCVを使用すると、Androidのコンピュータービジョンに入るためのしきい値が大幅に低下します。
同時に、ライブラリは優れたパフォーマンスを示したため、リアルタイムシステムで使用できます。 そのため、写真のサイズに応じて、必要なパラメーター(車の番号など)を使用した長方形の検索とローカライズに約0.2〜0.5秒かかります。 ライブラリは十分に文書化されています。