OpenCVの - ソーベル演算子、Scharrエッジ検出オペレータ

ソーベル演算子の基本的な考え方

ソーベル演算子は、主に離散微分エッジ検出演算子で使用され、それが画像強度関数を近似するガウス平滑化微分導出、勾配計算を組み合わせています。

 

計算プロセスソーベルオペレータプロモーター

(1)、それぞれ、二方向XとYの誘導体

導出X方向:ソース画像とG X入り組ん

y方向の導出:ソース画像及びG Y入り組ん

(2)各点について、二つ以上の画像を結合した結果は、約勾配を得

に単純化することができます。

 

ソーベル機能

ボイドソーベル(InputArray SRC、OutputArray DST、INT ddepth、INT DX、DY INT、INT ksize = 3、ダブルスケール= 1、ダブルデルタ= 0、INT borderType = BORDER_DEFAULT)。
  • SRC、入力画像は、マットタイプを埋めるために。
  • DST、出力画像と元画像と同じサイズとタイプを有する必要があります。
  • ddepth、出力画像の深さは、次の要件を満たしています。

src.depth()= CV_8U、ddepth = -1 / CV_16S / CV_32F / CV_64F

src.depth()= CV_16U / CV_16S、ddepth = -1 / CV_32F / CV_64F

src.depth()= CV_32F、ddepth = -1 / CV_32F / CV_64F

src.depth()= CV_64F、ddepth = -1 / CV_64F

  • DXで注文誘導体は、x方向は0のみです。場合x方向シークに一次導関数、DX = 1、DY = 0。
  • 順序番号DY、Y方向ガイドは、0のみです。方向及びyの一次導関数であれば、DX = 0、DY = 1。
  • ksizeは、デフォルト値は3であり、核のソーベル大きさを表し、1,3,5,7-をフェッチしなければなりません。
  • scale,计算导数值的缩放因子,默认值为 1,表示默认情况下不进行缩放。
  • delta,输出梯度 = scale * G + delta。
  • borderType,Gx 和 Gy 都有一定大小,边缘会处理不到,需要进行边缘扩展。这个参数指定边缘扩充类型。

 一般情况下,都是使用 ksize×ksize 内核来计算导数的,然而,当 ksize = 1 时,会使用 3×1、1×3 的内核。这种情况下,并没有进行高斯平滑操作。

代码示例:

#include<opencv.hpp>
using namespace cv;
int main() {
    Mat src = imread("C:/Users/齐明洋/Desktop/证件照/7.jpg");
    GaussianBlur(src, src, Size(3, 3), 0, 0);
    imshow("src", src);

    Mat gray, x_img, y_img, sobel_img;
    cvtColor(src, gray, COLOR_BGR2GRAY);
    Sobel(gray, x_img, -1, 1, 0, 3);
    imshow("x_img", x_img);
    Sobel(gray, y_img, -1, 0, 1, 3);
    imshow("y_img", y_img);

    addWeighted(x_img, 1, y_img, 1, 0, sobel_img);
//https://www.cnblogs.com/bjxqmy/p/11986135.html imshow(
"sobel_img", sobel_img); waitKey(0); }

效果演示:

 

补充说明:当内核大小为 3×3 时,sobel 内核可能产生比较明显的误差,毕竟 sobel 算子只是求取了导数的近似值而已。为解决这一问题,OpenCV 提供了 Scharr 函数,但该函数仅作用于 3×3 的内核。该函数的运算与 Sobel 函数一样快,但结果更精确,其内核为

 

借鉴博客:https://www.cnblogs.com/wxl845235800/p/7700887.html

https://www.cnblogs.com/sevenyuan/p/7874344.html

 

おすすめ

転載: www.cnblogs.com/bjxqmy/p/12325852.html