OpenCV3エントリ(8個)のエッジ検出

1 、エッジ検出基づきます

エッジ画像は、エッジ点はグレーレベルピクセルのステップ変化、すなわち、階調値が大きいほど又は大きく場所の誘導体、エッジ検出が一つの画像認識される、画像の基本的な特徴です。一次微分及び2次微分画像とグレー遷移のイメージを強化するため、エッジは灰色変更箇所です。したがって、そのようなロバート、ソーベル、としてこれらの従来の1階微分演算子は次のようにプレウィット、及びラプラシアン2次微分演算子のような本質的にエッジを検出するために使用されています。これらの演算子は、エッジ検出オペレータ呼び出すことができます。

エッジ検出は大幅一般的なエッジ検出ステップでは、画像の重要な構造的特性を保持している無関係な情報を除外し、データ量を減らすことができます。

1)フィルタ

エッジ検出は、ノイズ差動ノイズの勾配計算感受性に敏感で、フィルタリングすることによってノイズ抑制することが必要である、誘導体、一次および二次導関数に基づいて、主画像です。

2)強化

境界を検出するために、それは近隣グレースケールを決定する必要がある、ベースエッジ強調された画像は、鮮鋭化投影面積階調変化を用いて、近傍の輝度値の変化点を決定することです。

3)検出

強調された画像の後に、勾配が比較的大きいの近傍の値ではなく、全ての点の多くの点がエッジ点が使用されている方法を選択する必要があり、閾値は、一般に、画像点の各々を分割するために使用されます。

2 、エッジ検出オペレータ

2.1 一次微分演算子

1)原則

グレー画像のエッジ画像を迅速に場所を変更すること起こります。F(t)に対する、その誘導体F「(t)はどこでも傾向を反映し、最速、ソーベルオペレータ思想の位置の変化の最大の誘導体、アナログの一次導関数を見つけることです。

どこで:

勾配の方向は、関数f(x、y)の最大変化率の方向です。メトリック値の大きさの最大変化率として勾配の大きさ:

離散的な二次元関数f(i、j)は、勾配の有限差分近似として使用することができます。

計算を簡単にするために、絶対値が近似することができます。

|▽F(i、j)は| = | F(I + 1、j)は(i、j)は、-f | + | F(I、J + 1)-f(i、j)は|

2)Sobelオペレータ

ソーベル演算子は、離散微分演算子(離散微分演算子)であり、第一次微分演算子として知られている画像強度のおおよその勾配、エッジの勾配がより可能性が高いほど、誘導体平滑ソーベルと微分ガウスのセットを計算するために使用されますプロモーター、オペレーター誘導体、水平方向と垂直方向の誘導体、得られた勾配画像は、X及びY方向の方式の画像です。

プロトタイプ:

CV_EXPORTS_W ボイドソーベル(InputArray SRC、OutputArray DST、INT ddepth、
                          INT DX、INT DY、INT ksize = 3 ダブルスケール= 1ダブルデルタ= 0 INT borderType = BORDER_DEFAULT)。

サンプルコード:

=関数imread IMG(" D:\\ \\ LeanOpenCV 5.OpenCV WORK \\ \\ \\ pic_src pic7.bmp " 、IMREAD_GRAYSCALE); 
関数imshow(" アートワーク" 、IMG); 

// X方向の勾配   
ソーベル(IMG、 imgX、CV_8U、10311 、BORDER_DEFAULT); 
convertScaleAbs(imgX、imgX); 
関数imshow(" X方向ソーベル" 、imgX); 

// のY方向勾配   
ソーベル(IMG、IMGY、CV_8U、0。1311 、BORDER_DEFAULT)。
convertScaleAbs(IMGY、IMGY)。
関数imshow(" Y方向、ソーベル" 、IMGY); 

// 複合勾配(約)   
addWeighted(imgX、0.5、IMGY、0.50 、IMG2); 
関数imshow(" ソーベルの全体的な方向"、IMG2)。

出力は次のようになります。

2.2 二次微分演算子

1)原則

二次元関数f(x、y)は、第2次微分(ラプラシアン)で定義されています。

ラプラス演算子の後に上記の式を添加しました。

以下に該当するフィルタテンプレート:

絶対値が同じパターンの正および負の係数に応答して、勾配を算出考慮すると、上記のテンプレートはまた、のように表すことができます。

上記のテンプレートは、対称性を有するので、フィルタはない上記2次微分の計算と同様に、必要とされることができます。

2)応用

ラプラシアン2階微分演算子はラプラス演算子の応答がより強くノイズのない画像のみ適し応答の画素エッジ又はライン、より単離するために、ノイズに敏感です。ノイズの存在下で、低域の前エッジ検出ラプラシアンオペレータにフィルタリングを利用することが必要。ガウス - ラプラシアン、またというログオペレータは、この欠陥が作成され、これは、最初にガウスローパスフィルタ、第2次微分のラプラス鮮鋭化を補完することです。

例としては、次のとおりです。

img = imread("D:\\WORK\\5.OpenCV\\LeanOpenCV\\pic_src\\pic7.bmp", IMREAD_GRAYSCALE);
imshow("原图", img);
GaussianBlur(img, img2, Size(5, 5), 0, 0);
imshow("高斯图", img2);
Laplacian(img2, img3, CV_8U, 3, 1, 0);
imshow("Laplacian图", img3);

输出结果为:

2.3 Canny算子

1)原理

在图像边缘检测中,抑制噪声和边缘精准定位是无法同时满足的,一些边缘检测算法通过平滑滤波去除噪声的同时,也增加了边缘检测的不确定性,而提高边缘检测算子对边缘的敏感性的同时,也提高了对噪声的敏感性。Canny算子力图在抗噪声干扰和精准定位之间寻求最佳折中方案。

Canny算法主要有4个步骤:

  • 用高斯滤波器来平滑图像;
  • 用一介偏导的有限差分来计算梯度的幅值和方向;
  • 对梯度进行非极大值抑制,保留极大值,抑制其他值;
  • 用双阈值算法检测和连接边缘。

2)应用

函数原型为:

CV_EXPORTS_W void Canny( InputArray image, OutputArray edges,
                         double threshold1, double threshold2,
int apertureSize = 3, bool L2gradient = false );

示例如下:

img = imread("D:\\WORK\\5.OpenCV\\LeanOpenCV\\pic_src\\pic7.bmp", IMREAD_GRAYSCALE);
imshow("原图", img);
Canny(img, img2, 3, 9, 3);
imshow("canny", img2);

输出效果如下图。

修改阈值之后,Canny(img, img2, 45, 90, 3);效果如下图。

3、参考文献

1、《OpenCV3 编程入门》,电子工业出版社,毛星雨著

2、《学习OpenCV》,清华大学出版社,Gary Bradski Adrian kaehler

3Sobel边缘检测

https://www.cnblogs.com/yibeimingyue/p/10878514.html

4、学习笔记-canny边缘检测

https://www.cnblgs.com/mmmmc/p/10524640.html

 

个人博客,转载请注明。

https://www.cnblogs.com/pingwen/p/12324348.html

おすすめ

転載: www.cnblogs.com/pingwen/p/12324348.html