そして、勾配はラプラシアンを計算します
コンピュータ画像は、キーステップ勾配多くの重要な特徴抽出は、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);