基于OpenCV的土壤裂缝分割系统
1.圖片演示
2.視頻演示
Python基于OpenCV的土壤裂縫分割系統(tǒng)[源碼&部署教程]
3.項(xiàng)目背景
在一幅圖像中包括的內(nèi)容有很多,除了目標(biāo)物體之外,還有背景信息以及各類噪聲信息。那么要想能夠從多種內(nèi)容的數(shù)字圖像當(dāng)中直接提取出我們所需要的目標(biāo)物體,就需要加強(qiáng)目標(biāo)的圖像特征,削弱干擾物的圖像特征。圖像分割中的二值化分割就能實(shí)現(xiàn)如上的功能。
圖像二值化分割就是將圖像上的像素點(diǎn)的灰度值根據(jù)某種或某些算法設(shè)置為0或255,也就是將整個(gè)圖像呈現(xiàn)出明顯的黑白效果。將采集的圖像信息灰度化之后仍不能較為清晰的識(shí)別裂縫信息,采用圖像二值化分割可以明顯的反映出裂縫信息與背景信息,十分直觀的識(shí)別出裂縫。常用的二值化方法有全局二值化和局部自適應(yīng)二值化。
(1)全局二值化
最為常見(jiàn)的二值化分割方法是全局二值化分割。具體實(shí)現(xiàn)原理是設(shè)置一個(gè)全局閾值T,用該閾值T將圖像中的像素?cái)?shù)據(jù)信息分成兩個(gè)部分,即像素值大于T的像素群和像素值小于T的像素群。例如,我們可以將像素值大于T的像素群中的像素設(shè)定為白色(或者為黑色),像素值小于T的像素群中的像素設(shè)定為黑色(或者為白色)。
選擇合適的閾值將裂縫信息與背景信息及干擾物信息有效地進(jìn)行分割。
但實(shí)際操作中由于受光線的影響,采集圖像的明暗難以掌握,很難選擇統(tǒng)的閾值進(jìn)行分割。
(2)局部自適應(yīng)二值化
為了改善全局二值化的缺陷,局部二值化方法應(yīng)運(yùn)而生。
局部二值化方法,就是根據(jù)某些預(yù)先指定的規(guī)則,將整幅圖像按照條件劃分為若干個(gè)窗口,然后將這些窗口中的每一個(gè)窗口中的圖像的每一個(gè)像素點(diǎn),根據(jù)其像素值使用同一個(gè)的閾值T將該窗口內(nèi)的圖像的像素劃分為兩個(gè)部分,從而進(jìn)行二值化處理。
當(dāng)然,局部二值化也有其自身的不足,這個(gè)不足就是需要對(duì)閾值T的取值進(jìn)行預(yù)先的選定。然而,這個(gè)閾值的選定過(guò)程是沒(méi)有任何理論支持的,以往的學(xué)看的一般做法為僅僅取該窗口中像素點(diǎn)的像素值的平局值,或者是根據(jù)某些實(shí)際實(shí)驗(yàn)中得出閾值T。
4.Canny邊緣檢測(cè)
CV2提供了提取圖像邊緣的函數(shù)canny。其算法思想如下:
高斯濾波
gaussian = cv2.GaussianBlur(color_img, (gaussian_ksize,gaussian_ksize), gaussian_sigmax)color_img 輸入圖片
gaussian_ksize 高斯核大小,可以為方形矩陣,也可以為矩形
gaussian_sigmax X方向上的高斯核標(biāo)準(zhǔn)偏差
Canny邊緣檢測(cè)器是一種被廣泛使用的算法,并被認(rèn)為是邊緣檢測(cè)最優(yōu)的算法,該方法使用了比高斯差分算法更復(fù)雜的技巧,如多向灰度梯度和滯后閾值化
步驟
平滑圖像:使用高斯濾波器與圖像進(jìn)行卷積,平滑圖像,以減少邊緣檢測(cè)器上明顯的噪聲影響
計(jì)算圖像的梯度和方向:圖像中的邊緣可以指向各個(gè)方向,這里計(jì)算圖像的梯度,并將梯度分類為垂直、水平和斜對(duì)角。
非最大值抑制:利用上一步計(jì)算出來(lái)的梯度方向,檢測(cè)某一像素在梯度的正方向和負(fù)方向上是否是局部最大值,如果是,則該像素點(diǎn)保留為邊緣點(diǎn),否則該像素點(diǎn)將被抑制。
雙閾值算法檢測(cè)和連接邊緣:仍然存在由于噪聲和顏色變化引起的一些邊緣像素。為了解決這些雜散響應(yīng),必須用弱梯度值過(guò)濾邊緣像素,并保留具有高梯度值的邊緣像素,可以通過(guò)選擇高低閾值來(lái)實(shí)現(xiàn)
5.Sobel邊緣檢測(cè)
Sobel算子:是離散微分算子(discrete differentiation operator),用來(lái)計(jì)算圖像灰度的近似梯度,梯度越大越有可能是邊緣。
Soble算子的功能集合了高斯平滑和微分求導(dǎo),又被稱為一階微分算子,求導(dǎo)算子,在水平和垂直兩個(gè)方向上求導(dǎo),得到的是圖像在X方法與Y方向梯度圖像。
缺點(diǎn):比較敏感,容易受影響,要通過(guò)高斯模糊(平滑)來(lái)降噪。
算子是通過(guò)權(quán)重不同來(lái)擴(kuò)大差異。
(1)梯度計(jì)算:(在兩個(gè)方向求導(dǎo),假設(shè)被作用圖像為 I)
水平變化: 將 I 與一個(gè)奇數(shù)大小的內(nèi)核 Gx進(jìn)行卷積。比如,當(dāng)內(nèi)核大小為3時(shí), Gx的計(jì)算結(jié)果為:
垂直變化: 將 I 與一個(gè)奇數(shù)大小的內(nèi)核 Gy進(jìn)行卷積。比如,當(dāng)內(nèi)核大小為3時(shí), Gy的計(jì)算結(jié)果為:
在圖像的每一像素上,結(jié)合以上兩個(gè)結(jié)果求出近似梯度:
有時(shí)也用下面更簡(jiǎn)單公式代替,計(jì)算速度快:(最終圖像梯度)。
(2)Scharr:當(dāng)內(nèi)核大小為3時(shí), 以上Sobel內(nèi)核可能產(chǎn)生比較明顯的誤差(畢竟,Sobel算子只是求取了導(dǎo)數(shù)的近似值)。 為解決這一問(wèn)題,OpenCV提供了 Scharr 函數(shù),但該函數(shù)僅作用于大小為3的內(nèi)核。該函數(shù)的運(yùn)算與Sobel函數(shù)一樣快,但結(jié)果卻更加精確,不怕干擾,其內(nèi)核為:
(3)Sobel/Scharr提取邊緣(求導(dǎo))步驟:
1)高斯模糊平滑降噪:
GaussianBlur( src, dst, Size(3,3), 0, 0, BORDER_DEFAULT );
2)轉(zhuǎn)灰度:
cvtColor( src, gray, COLOR_RGB2GRAY );
3)求X和Y方向的梯度(求導(dǎo)):
Sobel(gray_src, xgrad, CV_16S, 1, 0, 3);
Sobel(gray_src, ygrad, CV_16S, 0, 1, 3);
Scharr(gray_src, xgrad, CV_16S, 1, 0);
Scharr(gray_src, ygrad, CV_16S, 0, 1);
4)像素取絕對(duì)值:
convertScaleAbs(A, B); //計(jì)算圖像A的像素絕對(duì)值,輸出到圖像B
[圖片上傳失敗…(image-4ea8ad-1662621323461)]
5)相加X(jué)和Y,得到綜合梯度,稱為振幅圖像:
addWeighted( A, 0.5,B, 0.5, 0, AB); //混合權(quán)重相加,效果較差
6.Laplacian算子邊緣檢測(cè)
Laplacian算子利用二階導(dǎo)數(shù)信息,具有各向同性,即與坐標(biāo)軸方向無(wú)關(guān),坐標(biāo)軸旋轉(zhuǎn)后梯度結(jié)果不變。使得圖像經(jīng)過(guò)二階微分后,在邊緣處產(chǎn)生一個(gè)陡峭的零交叉點(diǎn),根據(jù)這個(gè)對(duì)零交叉點(diǎn)判斷邊緣。其4鄰域系統(tǒng)和8鄰域系統(tǒng)的Laplacian算子的模板分別如圖所示。
通常使用的拉普拉斯算子3×3模板如圖所示:
Laplacian算子對(duì)噪聲比較敏感,Laplacian算子有一個(gè)缺點(diǎn)是它對(duì)圖像中的某些邊緣產(chǎn)生雙重響應(yīng)。所以圖像一般先經(jīng)過(guò)平滑處理,通常把Laplacian算子和平滑算子結(jié)合起來(lái)生成一個(gè)新的模板。
7.代碼實(shí)現(xiàn)
I=imread('lena.bmp'); I=im2double(I); %figure; %imshow(I);title('org img');[height width R]=size(I); for i=2:height-1for j=2:width-1L(i,j)=4*I(i,j)-I(i-1,j)-I(i+1,j)-I(i,j-1)-I(i,j+1);end end %figure; %imshow(L,[]);%G(i,j)=0.3*L(i,j)+0.7*I(i,j); %figure; %imshow(G,[]);for i=1:height-1for j=1:width-1if (L(i,j)<0.2)L(i,j)=1;else L(i,j)=0;endend end figure; imshow(L,[]);8.系統(tǒng)整合
下圖完整源碼&環(huán)境部署視頻教程&自定義UI界面
參考博客《Python基于OpenCV的土壤裂縫分割系統(tǒng)[源碼&部署教程]》
9.參考文獻(xiàn)
- [1]農(nóng)田土壤表面干縮裂縫的隨機(jī)分布統(tǒng)計(jì)特征[J]. 張展羽,朱文淵,朱成立,王策,吳春輝,司涵. 農(nóng)業(yè)工程學(xué)報(bào). 2013(16)
- [2]牛肉大理石花紋圖像特征信息提取及自動(dòng)分級(jí)方法[J]. 周彤,彭彥昆. 農(nóng)業(yè)工程學(xué)報(bào). 2013(15)
- [3]元謀干熱河谷區(qū)退化坡地土壤裂縫形態(tài)發(fā)育的影響因子[J]. 熊東紅,楊丹,李佳佳,蘇正安,董一帆,翟娟. 農(nóng)業(yè)工程學(xué)報(bào). 2013(01)
- [4]影響?zhàn)ば酝帘砻娓煽s裂縫結(jié)構(gòu)形態(tài)的因素及定量分析[J]. 唐朝生,施斌,劉春,王寶軍. 水利學(xué)報(bào). 2007(10)
- [5]考慮裂隙及雨水入滲影響的膨脹土邊坡穩(wěn)定性分析[J]. 姚海林,鄭少河,陳守義. 巖土工程學(xué)報(bào). 2001(05)
總結(jié)
以上是生活随笔為你收集整理的基于OpenCV的土壤裂缝分割系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: easyui filebox文件大小校验
- 下一篇: 计算机nls数据丢失损坏无法启动,系统开