【OpenCV】邊緣檢測:Sobel、拉普拉斯運算元
邊緣
邊緣(edge)是指影象區域性強度變化最顯著的部分。主要存在於目標與目標、目標與背景、區域與區域(包括不同色彩)之間,是影象分割、紋理特徵和形狀特徵等影象分析的重要基礎。
影象強度的顯著變化可分為:
- 階躍變化函式,即影象強度在不連續處的兩邊的畫素灰度值有著顯著的差異;
- 線條(屋頂)變化函式,即影象強度突然從一個值變化到另一個值,保持一較小行程後又回到原來的值。
影象的邊緣有方向和幅度兩個屬性,沿邊緣方向畫素變化平緩,垂直於邊緣方向畫素變化劇烈.邊緣上的這種變化可以用微分運算元檢測出來,通常用一階或二階導數來檢測邊緣。
(a)(b)分別是階躍函式和屋頂函式的二維影象;(c)(d)是階躍和屋頂函式的函式圖象;(e)(f)對應一階倒數;(g)(h)是二階倒數。
一階導數法:梯度運算元
對於左圖,左側的邊是正的(由暗到亮),右側的邊是負的(由亮到暗)。對於右圖,結論相反。常數部分為零。用來檢測邊是否存在。
梯度運算元 Gradient operators
函式f(x,y)在(x,y)處的梯度為一個向量:
計算這個向量的大小為:
近似為:
梯度的方向角為:
Sobel運算元
sobel運算元的表示:
梯度幅值:
用卷積模板來實現:
【相關程式碼】
介面
CV_EXPORTS_W void Sobel( InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT );
使用
/////////////////////////// Sobe l//////////////////////////////////// /// Generate grad_x and grad_y Mat grad_x, grad_y; Mat abs_grad_x, abs_grad_y; /// Gradient X //Scharr( src_gray, grad_x, ddepth, 1, 0, scale, delta, BORDER_DEFAULT ); //Calculates the first, second, third, or mixed image derivatives using an extended Sobel operator. Sobel( src_gray, grad_x, ddepth, 1, 0, 3, scale, delta, BORDER_DEFAULT ); convertScaleAbs( grad_x, abs_grad_x ); /// Gradient Y //Scharr( src_gray, grad_y, ddepth, 0, 1, scale, delta, BORDER_DEFAULT ); Sobel( src_gray, grad_y, ddepth, 0, 1, 3, scale, delta, BORDER_DEFAULT ); convertScaleAbs( grad_y, abs_grad_y ); /// Total Gradient (approximate) addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, grad );
二階微分法:拉普拉斯
二階微分在亮的一邊是負的,在暗的一邊是正的。常數部分為零。可以用來確定邊的準確位置,以及畫素在亮的一側還是暗的一側。
LapLace 拉普拉斯運算元
二維函式f(x,y)的拉普拉斯是一個二階的微分,定義為:
其中:
可以用多種方式將其表示為數字形式。對於一個3*3的區域,經驗上被推薦最多的形式是:
定義數字形式的拉普拉斯要求係數之和必為0
【相關程式碼】
介面
CV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth,
int ksize=1, double scale=1, double delta=0,
int borderType=BORDER_DEFAULT );
使用
Mat abs_dst,dst;
int scale = 1;
int delta = 0;
int ddepth = CV_16S;
int kernel_size = 3;
Laplacian( src_gray, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );
convertScaleAbs( dst, abs_dst );
namedWindow( window_name2, CV_WINDOW_AUTOSIZE );
實踐效果
原圖
Sobel 邊緣檢測
Sobel運算元可以直接計算Gx 、Gy可以檢測到邊的存在,以及從暗到亮,從亮到暗的變化。僅計算| Gx |,產生最強的響應是正交 於x軸的邊; | Gy |則是正交於y軸的邊。
Laplace邊緣檢測
拉普拉斯對噪聲敏感,會產生雙邊效果。不能檢測出邊的方向。通常不直接用於邊的檢測,只起輔助的角色,檢測一個畫素是在邊的亮的一邊還是暗的一邊利用零跨越,確定邊的位置。
相關推薦
【OpenCV】邊緣檢測:Sobel、拉普拉斯運算元
邊緣 邊緣(edge)是指影象區域性強度變化最顯著的部分。主要存在於目標與目標、目標與背景、區域與區域(包括不同色彩)之間,是影象分割、紋理特徵和形狀特徵等影象分析的重要基礎。 影象強度的顯著變化可分為: 階躍變化函式,即影象強度在不連續處的兩邊的畫素灰度值有著顯著的差異;
Python OpenCV _5邊緣檢測(Sobel運算元,Laplacian運算元,Canny運算元)
Python OpenCV這個初級影象處理系列是參考他人的文章寫的,有些地方做了一些改動,沒有太多理論,側重程式碼實現,主要目的是將這些基本操作程式碼系統地梳理一遍,也是為了以後能快速查詢。 此係列原始碼在我的GitHub裡:https://github.com/yeyujujishou19/P
深度學習【50】物體檢測:SSD: Single Shot MultiBox Detector論文翻譯
SSD在眾多的物體檢測方法中算是比較重要的。之前學習過,但是沒過多久就忘了,因此決定將該論文翻譯一下,以加深印象。 Abstract 我們提出了用單個深度神經網路進行物體檢測的方法,稱為SSD。在每個特徵圖中的每個位置,SSD將bbox(bounding
深度學習【17】物體檢測:Focal Loss 反向求導及darknet上的實現
Focal Loss 反向求導及darknet上的實現 Focal Loss 可以解決不平衡分類問題,是在交叉熵損失函式上的擴充套件。詳見,論文:Focal Loss for Dense Object Detection。 該文,主要推導FL在softmax
【opencv】矩形檢測
#include "cv.h" #include "highgui.h" #include <stdio.h> #include <math.h> #include <string.h> /////////////////
【opencv】多邊形檢測
示例程式碼為7邊形,直接改巨集定義即可 #include <cv.h> #include <highgui.h> #include <stdio.h> #include <math.h> #include &
【OpenCV】影象變換(二)邊緣檢測:梯度運算元、Sobel運算元和Laplace運算元
邊緣 邊緣(edge)是指影象區域性強度變化最顯著的部分。主要存在於目標與目標、目標與背景、區域與區域(包括不同色彩)之間,是影象分割、紋理特徵和形狀特徵等影象分析的重要基礎。 影象強度的顯著變化可分為: •階躍變化函式,即影象強度在不連續處的兩邊的畫
OpenCV探索之路(六):邊緣檢測(canny、sobel、laplacian)
邊緣檢測的一般步驟: 濾波——消除噪聲 增強——使邊界輪廓更加明顯 檢測——選出邊緣點 Canny演算法 Canny邊緣檢測演算法被很多人推崇為當今最優秀的邊緣檢測演算法,所以我們第一個就介紹他。 opencv中提供了Canny函式。 #include<
OpenCV——邊緣檢測(sobel算子、Laplacian算子、scharr濾波器)
scale 變換 得到 疊加 操作 fault sch laplacian 技術 1 #include <opencv2/opencv.hpp> 2 #include <iostream> 3 4 using nam
梯度與邊緣檢測常用運算元:Roberts、Prewitt、Sobel、Lapacian運算元
原文;https://blog.csdn.net/swj110119/article/details/51777422 一、學習心得: 學習影象處理的過程中,剛開始遇到影象梯度和一些運算元的概念,這兩者到底是什麼關係,又有什麼不同,一直困擾著我。後來在看到影象分
OpenCV實戰(一): Sobel、Laplacian、Canny 邊緣檢測
簡述 OpenCV邊緣檢測的一般步驟為: 濾波 增強 檢測 常用的邊緣檢測的運算元和濾波器有: Sobel運算元 Laplacian運算元 Canny運算元 Scharr濾波器 以下使用Sobel、Laplacian和Canny運算元進行邊緣檢測。圖片是從網上
OpenCV實戰(一): Sobel、Laplacian、Canny 邊緣檢測
watermark 邊緣檢測 char 方向梯度 濾波器 ima else term 51cto 簡述 OpenCV邊緣檢測的一般步驟為: 濾波 增強 檢測 常用的邊緣檢測的算子和濾波器有: Sobel算子 Laplacian算子 Canny算子 Scharr濾波器
【OpenCV】角點檢測:Harris角點及Shi-Tomasi角點檢測
角點 特徵檢測與匹配是Computer Vision 應用總重要的一部分,這需要尋找影象之間的特徵建立對應關係。點,也就是影象中的特殊位置,是很常用的一類特徵,點的區域性特徵也可以叫做“關鍵特徵點”(keypoint feature),或“興趣點”(interest poi
【OpenCV】Canny 邊緣檢測
Canny 邊緣檢測演算法 1986年,JOHN CANNY 提出一個很好的邊緣檢測演算法,被稱為Canny編邊緣檢測器[1]。 Canny邊緣檢測根據對信噪比與定位乘積進行測度,得到最優化逼近運算元,也就是Canny運算元。類似與 LoG 邊緣檢測方法,也屬於先平滑後求導
【OpenCV】Canny邊緣檢測
五個步驟: 1.使用高斯濾波器對影象進行去噪 2.計算梯度 3.在邊緣上使用非最大抑制—NMS 4.在檢測道德邊緣上使用雙閾值去除假陽性 5.分析邊緣極其之間的連線,以保證保留真正的邊緣並消除不明顯的邊緣 import cv2 import nu
Android opencv(三) 邊緣檢測Sobel、Canny
Sobel Sobel是檢測邊緣的一階導數,在檢測邊緣前需要通過濾波(blur)去噪來使圖片光滑,一般使用高斯濾波,大小取7x7. //高斯濾波 public static Mat removeNoiseGaussianBlur(Mat sr
【Java線程】鎖機制:synchronized、Lock、Condition轉載
留下 初始化 char 想要 interrupt 機制 運行 -m 特性 http://www.infoq.com/cn/articles/java-memory-model-5 深入理解Java內存模型(五)——鎖 http://www.ibm.com/develope
【OpenCV】【MFC】圖片、視頻、攝像頭輸入響應【詳細圖解】
tsp box 背景建模 img 有變 highgui 復制 creat int 記住新建項目後,要配置OpenCV環境!參考鏈接http://blog.csdn.net/zy122121cs/article/details/49180541 做工程搭建框架什麽的,基本的
【OpenCV】圖像增強---灰度變換、直方圖均衡化
test 增強 映射 display 得到 .cpp scalar pic 重要 圖像增強的目的:改善圖像的視覺效果或使圖像更適合於人或機器的分析處理。通過圖像增強,可以減少圖像噪聲,提高目標與背景的對比度,也可以增強或抑制圖像中的某些細節。 -------------
【mpich2】圖文教程:mpich2的安裝、配置、測試、vs配置、命令列測試(沒有使用)
轉載請註明出處,原文連結:https://blog.csdn.net/u013642500/article/details/83549093 【安裝mpich2】 1、開啟“mpich2-1.4.1p1-win-ia32.msi。 2、點選“Next”。 3、點選“N