在農業中,通常希望獲取不同土地的面積。雖然獲取這些土地的面積操作相對容易,但是卻涉及高額的費用。另外,如果對于不規則形狀的土地,測量土地面積的大小就變得相對困難。
幸運的是,有大量以衛星圖像的形式公開提供的農場土地數據。如下圖所示就是得到的土地的圖片。根據這樣的圖片,應用圖像處理算法,就可以計算得到每塊土地的面積。
我們可以使用導數濾波器,因為它似乎與人類如何區分土地或地塊的方式相匹配。當我們觀察物體時,我們使用對比度和陰影來確定物體的形狀,種類。類似地,可以使用導數濾波器來尋找對比區域。如果像素值與其周圍像素之間的差大于閾值,則將其標記為1,否則標記為0。這將創建一個具有選定原始圖像邊緣的二進制圖像。
原始圖像中存在大量噪點和細節,這可能會降低算法的成功率。建議在應用導數濾波器操作之前,對圖像進行模糊濾波去除噪聲。我們可以使用任意的模糊濾波器完成圖像去噪。由于我們主要目的是消除噪聲和微小的細節,同時保留繪圖的顏色以用于對比,因此我們使用了4x4的中值濾波器。之后對圖像進行灰度化,得到灰度圖像以便后續進行邊緣檢測。具體結果如下圖所示。
之后嘗試了三種邊緣檢測方法以找到最佳結果。
第一種邊緣檢測濾波器是Sobel濾波器。該濾波器在圖像的每個像素上執行梯度檢測。內置的Matlab、opencv函數可在水平和垂直方向上執行操作,并將結果組合在一起。具體結果如下所示。
通過結果可以知道生成的圖像幾乎沒有噪點。但是,不幸的是將濾波后的圖像與原始圖像進行比較,可以看出,地塊之間的許多分隔線沒有被很好地拾取。在農田的顏色與相鄰地塊差異不大的地區尤其如此。
第二種邊緣檢測方法是Canny過濾器。濾波結果在下面給出,從Canny濾波結果可以看出Canny濾波器檢測了了更多的邊緣。但是同樣存在缺點,這種方式會產生更多的噪聲。考慮到Canny算法將通過幅度閾值函數的像素與通過稍低閾值函數的相鄰像素合并,這是可以預期的。Canny算法比簡單的Sobel濾波器更為復雜。它還取決于事先要進行的高斯平滑。使用中值濾波器可能會阻止最佳結果。
第三種濾波器是高斯濾波器的拉普拉斯算子。該濾波器提取的結果如下圖所示。
通過結果我們可以發現,無論我們使用什么過濾器,都可以看到大多數突出的道路都被檢測到了。但是,農田內部的小區域和靠近道路的房屋是否產生的噪聲取決于我們選取的濾波器種類。農田圖像的這一特征使其非常適合高斯濾波器的拉普拉斯算子。查看測試結果,可以得出一個比較理想的結果。找到的道路數量最多,噪音最小。
為了進一步去除圖像中的噪聲,去除總像素面積小于平均像素面積值的所有白色區域。這個閾值是我們經過多次試驗得到的一個經驗值。小伙伴也可以嘗試其他的閾值。
之后對圖像進行反轉,得到田地的區域。之后對這個結果進行尺寸位4的膨脹運算。
有了這個圖像,計算每個土地的面積就很簡單了。Matlab(或OpenCV)的regionprop函數可用于查找每個區域的面積。仍有少量田地不是真正的田地,有些是道路或其他細節。為了減輕這些面積,我們只計算面積大于平均值減去一個標準偏差的區域。
然后為每個區上色,并在其位置打印其像素尺寸。結果可以在下圖中看到。打印的尺寸是該區域中像素的數值。除非像素和圖像尺寸之間存在已知比例,否則這些值將毫無用處。但是,我們知道衛星圖(例如Google Maps)往往帶有刻度,這就位像素數值提供了意義。
結果還是比較滿意。該應用程序能夠將大多數地塊分成自己的特定區域。但是,有一些例外。例如,像素值47,680的大橙色部分將兩個區域融合在一起。這可以通過使用膨脹值來解決。要考慮的另一項內容是,道路的擴張確實侵蝕了農場的像素區域。為了獲得更準確的農場價值,可能需要將這種侵蝕的結果添加到農場的總面積中。感興趣的小伙伴可以自行實現。
接下倆給出另一個示例結果
來源:小白學視覺
審核編輯:湯梓紅
-
濾波器
+關注
關注
162文章
7963瀏覽量
180207 -
算法
+關注
關注
23文章
4673瀏覽量
94189 -
邊緣檢測
+關注
關注
0文章
94瀏覽量
18338
原文標題:利用邊緣檢測計算物體面積(內含源碼)
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論