邊緣指的是畫素值發生躍遷的地方,是影象的顯著特徵之一,在影象特徵提取,物件檢測,模式識別等方面都有重要的作用。
如何捕捉/提取邊緣 ——對影象求一階導數
delta=f(x)-f(x-1),delta越大,說明畫素在x方向變化越大,邊緣訊號越強
用sobel運算元進行卷積運算,提取邊緣
是離散微分運算元,用來計算灰度的近似梯度
sobel運算元功能集合高斯平滑和微分求導
又被稱為一階微分運算元,求導運算元,在水平和垂直兩個方向上求導,得到影象x方向和y方向的梯度影象。
soble的x方向梯度-1
0+1-20
+2-10+1
sobel的y方向梯度-1
-2-100
0+1+2+1
最終的影象梯度:g=√gx
2+gy
2為了加快計算速度,將影象梯度的計算方法簡化為:g=|gx|+|gy|
在求取導數近似值的時候,kernel=3時不是很準確,opencv使用改進版本的scharr函式,運算元如下:
x方向上的梯度:-30
+3-10
0+10-10
+1y方向上的梯度:
-3-10-30
00+3+10
+3
cv::sobel(
inputarray src, //輸入影象
outputarray dst, //輸出影象,大小與輸入影象一致
int depth, //輸出影象深度
int dx, //x方向,幾階導數
int dy, //y方向,幾階導數
int ksize, //sobel運算元的kernel大小,必須是1,3,5,7
double scale=1,
double delta=0,
int bordertype =border_default
)
實現步驟:
高斯模糊->轉灰度影象->sobel運算元邊緣檢測
影象的輸入深度和輸出深度的對比(輸入必須大於輸入)
input depth( )
output depth
cv_8u
-1/cv_16s/cv_32f/cv_64f
cv_16u/cv_16s
-1/cv_32f/cv_64f
cv_32f
-1/cv_32f/cv_64f
cv_64f
-1/cv_64f
#include #include #includeusing namespace cv;
mat src, dst,gray;
int main(int argc, char** ar**)
char inputimage = "input image";
char outputimage = "output image";
char grayimage = "gray image";
namedwindow(inputimage, window_autosize);
namedwindow(outputimage, window_autosize);
namedwindow(grayimage, window_autosize);
imshow(inputimage, src);
gaussianblur(src, dst, size(3, 3), 0, 0);
cvtcolor(src, gray, color_bgr2gray);
imshow(grayimage, gray);
mat xgrad; //x方向上的梯度
mat ygrad; //y方向上的梯度
mat xygrad;
//scharr(gray, xgrad, cv_16s, 1, 0, 3); 可以理解為加強的sobel運算元
//scharr(gray, xgrad, cv_16s, 1, 0, 3);
sobel(gray, xgrad, cv_16s, 1, 0, 3);
sobel(gray, ygrad, cv_16s, 0, 1, 3);
convertscaleabs(xgrad, xgrad); //把xgrad統一變成正的
convertscaleabs(ygrad, ygrad); //把ygrad統一變成正的
imshow("xgrad", xgrad);
imshow("ygrad", ygrad);
//使用按照權重相加的方法將xy兩個方向的計算結果進行整合。
//addweighted(xgrad, 0.5, ygrad, 0.5, 0, xygrad);
//絕對值相加
mat sobeloutput1;
sobeloutput1= mat(xgrad.size(), xgrad.type());
int width = xgrad.cols;
int height = ygrad.rows;
for (int row = 0; row < height; row++)
} imshow(outputimage, sobeloutput1);
waitkey(0);
return 0;
}
Halcon封裝的找邊運算元 靈活好用
我們在做halcon找邊的時候有很多種方式,比如得到想要的邊緣輪廓,然後根據邊緣輪廓擬合邊緣。今天我們講一下另外一種擬合邊的方式。視覺行業的從業者應該都聽過或者用過visionpro,工具化的開發方式,強大的資料流確實好用,再加上很多優化後的工具,在執行時間和穩定性方面做的非常好。但是有時候很你會發...
樹邊,前向邊,後向邊,橫叉邊
樹邊,前向邊,後向邊,橫叉邊,應該說,不是乙個圖本身有的概念,應該是圖進行dfs時才有的概念。圖進行dfs會得到一棵dfs樹 森林 在這個樹上才有了這些概念。對圖進行dfs,可以從任意的頂點開始,遍歷的方式也是多樣的,所以不同的遍歷會得到不同的dfs樹,進而產生不同的樹邊,前向邊,後向邊,橫叉邊。所...
SparkRDD運算元 sample運算元
val newrdd oldrdd.sample withreplacement,fraction,seed withreplacement表示是抽出的資料是否放回,true為有放回的抽樣,false為無放回的抽樣 fraction表示隨機抽樣的資料數量 seed用於指定隨機數生成器種子 def s...