【日記OpenCVの-java研究]を-09-勾配ラプラシアンを計算します

そして、勾配はラプラシアンを計算します

コンピュータ画像は、キーステップ勾配多くの重要な特徴抽出は、OpenCVのは、2つの非常に重要な提供であり、ソーベル勾配関数Scharrを算出します

画像のエッジ部分のために、勾配値は、画像勾配値の平坦な領域は、一般に、小さな比較的大きいです

ソーベル勾配

ソーベル勾配演算子は、X及びY方向のAPIを算出し、次の

Sobel(Mat src, Mat dst, int ddepth, int dx, int dy)
  • SRC:入力画像

  • DST:出力画像

  • ddepth:出力画像の深さは、
    一般CV_32F又はCV_32SCであり
     
    、データが8ビットのオーバーフローになり、入力画像を勾配演算誤差が生じる、算出された入力深度画像、同じ入力を許可しないことに留意すべきです

  • DX:x方向を算出表す
    ない1 2

  • DYは、Y方向が算出される表す
    1は2ありません。

  • INT ksize:エッジ検出ksizeように実行されるテンプレートサイズのデフォルト値は3である、ksize、3,5,7の値。特殊なケース:ksize = 1、テンプレートが使用されている3 1 1 * 3。
    場合ksize = 3、ソーベルカーネルは、明らかなエラーを生成することができます。

次のコードを示しによって

Mat m1 = Imgcodecs.imread("C:\\test\\256_256_t1.png" );

HighGui.imshow("原图",m1);

Imgproc.cvtColor(m1,m1,Imgproc.COLOR_BGR2GRAY);

Mat s1 = new Mat();
Imgproc.Sobel(m1,s1, CvType.CV_32F,1,0);//x方向

//Mat转换成8位,如果不写将不能展示
Core.convertScaleAbs(s1,s1);

Mat s2 = new Mat();
Imgproc.Sobel(m1,s2, CvType.CV_32F,0,1);//y方向
Core.convertScaleAbs(s2,s2);

Mat s3 = new Mat();
Core.add(s1,s2,s3); //图像相加

HighGui.imshow("X方向",s1);
HighGui.imshow("Y方向",s2);
HighGui.imshow("相加后",s3);

これは、抽出されたエッジを置きます

それは、このコードの下にことに留意すべきです

Core.convertScaleAbs(Mat src, Mat dst);

この方法は、8ビットの画像に変換します

ここに画像を挿入説明


Scharr勾配

Scharrソーベルの拡張バージョンをアップグレード

APIは、次のとおりです。

Scharr(Mat src, Mat dst, int ddepth, int dx, int dy)

ここではソーベル法と同じなので、ここでは誰も説明

あなたは直接ソーベルScharrに直接置くことができます

Mat m1 = Imgcodecs.imread("C:\\test\\256_256_t1.png" );

HighGui.imshow("原图",m1);

Imgproc.cvtColor(m1,m1,Imgproc.COLOR_BGR2GRAY);

Mat s1 = new Mat();
Imgproc.Scharr(m1,s1, CvType.CV_32F,1,0);//x方向

//Mat转换成8位,如果不写将不能展示
Core.convertScaleAbs(s1,s1);

Mat s2 = new Mat();
Imgproc.Scharr(m1,s2, CvType.CV_32F,0,1);//y方向
Core.convertScaleAbs(s2,s2);

Mat s3 = new Mat();
Core.add(s1,s2,s3); //图像相加

HighGui.imshow("X方向",s1);
HighGui.imshow("Y方向",s2);
HighGui.imshow("相加后",s3);

ここに画像を挿入説明


ラプラス演算子

画像強調に使用することができるラプラス演算子は、バーのエッジを検出するために用いることができるが、それは非常に面倒になります

Laplacian(Mat src, Mat dst, int ddepth, int ksize, double scale, double delta) 
  • SRC:入力画像
  • DST:出力画像
  • ddepth:出力画像の深さ、共通CV_32F
  • ksize:一般的な3x3のksize = 3
  • 規模:かどうかのスケールにデフォルト= 1
  • デルタ:絵のデフォルト= 0を調整するかどうか

次のコードを示しによって

Mat m1 = Imgcodecs.imread("C:\\test\\256_256_t1.png" );
 
HighGui.imshow("原图",m1);

Mat s1 = new Mat();
Imgproc.Laplacian(m1,s1, CvType.CV_32F);

Core.convertScaleAbs(s1,s1);

Mat s2 = new Mat();
Imgproc.Laplacian(m1,s2, CvType.CV_32F,3,1,0);//ksize = 3

Core.convertScaleAbs(s2,s2);

HighGui.imshow("默认ksize",s1);
HighGui.imshow("ksize=3",s2);

ここに画像を挿入説明


前の[OpenCVの学習日記-java] -08-しきい値としきい値

公開された34元の記事 ウォン称賛32 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_18604209/article/details/104074549