基於區域和邊緣的分割
引言
影像分割是將數字影像分割成更小的組的過程,以便更容易、更簡單地處理和分析更大的影像。基於區域和基於邊緣的分割是影像分割的不同型別。
在深入研究基於區域和基於邊緣的分割之前,讓我們簡要概述一下分割是如何完成的。
影像分割
簡單來說,分割就是為影像中的畫素分配特定標籤的過程。具有相同標籤的一組畫素成為較大影像的一個分割。
例如,以下是兩張影像及其分割。
在第一張影像中,馬的圖片是一個與周圍環境分開的單個分割。
在第二張影像中,左側的道路在右側被數字分割成不同的部分,並用不同的顏色顯示。
因此,此過程降低了計算和處理的複雜性,特別是對於影像處理和 AI 演算法,因為現在我們可以按分割級別進行工作,而不是一次處理整個影像,這可能會非常密集地進行計算並給資源帶來壓力。
現在,我們已經學習了一些分割的基礎知識,讓我們繼續學習基於區域和基於邊緣的分割。
基於區域的分割
此過程涉及將影像劃分為具有特定規則集的較小部分。此技術採用一種演算法,將影像劃分為具有共同畫素特徵的多個元件。該過程尋找影像中的部分段。小的部分可以包含來自相鄰畫素的相似畫素,並隨後增大尺寸。該演算法可以獲取周圍畫素的灰度級別。
它分為兩種型別
區域生長 - 此方法透過包含具有相似特徵的相鄰畫素來遞迴地增長分割。它使用灰度區域的灰度級差異和紋理影像的紋理差異。
區域分裂 - 在此方法中,整個影像被視為單個區域。現在,要將區域劃分為多個部分,它會檢查初始區域中包含的畫素是否遵循預定義的標準。如果它們遵循相似的規則,則將它們放入一個部分。
基於邊緣的分割
在基於邊緣的分割中,影像的邊界或邊緣彼此之間以及與影像的背景之間存在顯著差異。此事實用於對具有不同強度級別和邊緣不連續性的影像進行邊緣檢測。邊緣包含相當多的關於影像的資訊。此方法中的兩個常見任務是邊緣檢測和邊緣連線。在邊緣檢測中,識別邊界。顧名思義,邊緣連線涉及將一條邊緣與另一條邊緣連線起來。一種常用的檢測輪廓的技術是閾值處理。
現在,讓我們來看一下邊緣和區域分割的程式碼實現。
程式碼實現 - 基於邊緣的
示例
import numpy as np
import matplotlib.pyplot as plt
from skimage import data
from skimage.feature import canny
from scipy import ndimage as ndi
coins = data.coins()
h = np.histogram(coins, bins=np.arange(0, 256))
figure, (ax_1) = plt.subplots()
ax_1.imshow(coins, cmap=plt.cm.gray)
edges = canny(coins/255.)
figure, axis = plt.subplots(figsize=(6, 4))
axis.imshow(edges, cmap=plt.cm.gray)
axis.axis('off')
axis.set_title('Detect canny')
fc = ndi.binary_fill_holes(edges)
figure, axis = plt.subplots(figsize=(6, 4))
axis.imshow(fc, cmap=plt.cm.gray)
axis.axis('off')
axis.set_title('hole fill')
輸出
Text(0.5, 1.0, 'hole fill')
程式碼實現 - 基於區域的
示例
from skimage.filters import sobel
import numpy as np
import matplotlib.pyplot as plt
from skimage import data
from skimage.feature import canny
from scipy import ndimage as ndi
coins = data.coins()
elmap = sobel(coins)
figure, axis = plt.subplots(figsize=(6, 4))
axis.imshow(elmap, cmap=plt.cm.gray)
axis.axis('off')
axis.set_title('map elevation')
輸出
Text(0.5, 1.0, 'map elevation')
結論
基於區域和基於邊緣的分割在依賴於基於影像和影片的操作的現代演算法中非常有用。這些技術很簡單,但功能強大。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP