图像分割:Python的SLIC超像素分割
圖像分割:Python的SLIC超像素分割
- 1. 什么是超像素?
- 2. 為什么超像素在計算機視覺方面有重要的作用?
- 3. 簡單線性迭代聚類(SLIC)
- 4. 效果圖
- 5. 源碼
- 參考
1. 什么是超像素?
在單個或多個通道中,圖像表示為像素網格。我們采用這些M x N像素網格,然后對其應用算法,例如面部檢測和識別,模板匹配,甚至將深度學習直接應用于原始像素強度。
像素網格并不是圖像的自然表示。事實上,單個像素并不具有語義含義,將像素分組為像素網格只是圖像的偽影,這是捕獲和創建數字圖像過程的一部分。
當在像素網格上執行像素局部分組時,我們就會得到超像素(Superpixel)。 超像素比簡單的像素網格具有更多的感知和語義含義。
2. 為什么超像素在計算機視覺方面有重要的作用?
從 像素網格到超像素的映射 將具有以下理想的特性:
-
計算效率:超像素使我們能夠將圖像本身的復雜性從數十萬個像素減少到僅數百個超像素。這些超像素中的每一個都將包含某種感知性的,理想情況下是語義性的值。
-
感知意義:相比檢查幾乎沒有感知意義的像素網格中的單個像素,屬于一個超像素組的像素具有某種共性,例如相似的顏色或紋理分布。
-
過度分割:大多數超像素算法都會過度分割圖像。在找到圖像中大多數重要邊界的同時,產生了一些微不足道的邊界。但恰恰證明超像素分割并未損失細節。從像素網格到超像素映射的像素損失很少(或沒有)。
-
超像素上的圖形:更具有“代表性有效”。相比在50,000 x 50,000像素的網格上構造一個圖形,其中每個像素代表圖形中的一個節點,將超像素應用于像素網格空間,用剩下200個(任意)超像素,構建圖形實際上更為有效。
3. 簡單線性迭代聚類(SLIC)
簡單線性迭代聚類(Simple Linear Iterative Clusters SLIC),執行SLTC 超像素分割,可以用超像素段覆蓋原始圖像;
segments = slic(image, n_segments = numSegments, sigma = 5)
- 僅有一個必需參數:
- image:待執行SLTC超像素分割的圖像,必須
- n_segments: 定義我們要生成多少個超像素段的參數,默認100,可選
- sigma:在分割之前應用的平滑高斯核,默認5,可選
4. 效果圖
分割100、200、300塊的效果圖如下:
分割 50塊效果圖:
分割 100塊效果圖~~
5. 源碼
# USAGE
# python superpixel.py --image cactus.jpgimport argparseimport matplotlib.pyplot as plt
from skimage import io
from skimage.segmentation import mark_boundaries # 導入mark_boundaries 以繪制實際的超像素分割
# 導入必要的包
from skimage.segmentation import slic # 導入包以使用SLIC superpixel segmentation
from skimage.util import img_as_float# 構建命令行參數及解析
# --image 輸入圖片的路徑
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="Path to the image")
args = vars(ap.parse_args())# 加載圖像
# 將圖像從無符號的8位int轉換為具有[0,1]范圍的浮點數據
image = img_as_float(io.imread(args["image"]))# 遍歷超像素段的數量 研究3種尺寸不斷增加的段,100、200、300
for numSegments in (30, 50, 100):# 執行SLTC 超像素分割,該功能僅獲取原始圖像并覆蓋我們的超像素段。# 僅有一個必需參數:# image:待執行SLTC超像素分割的圖像# n_segments: 定義我們要生成多少個超像素段的參數,默認100# sigma:在分割之前應用的平滑高斯核segments = slic(image, n_segments=numSegments, sigma=5)# 繪制SLTC 的分割結果fig = plt.figure("Superpixels -- %d segments" % (numSegments))ax = fig.add_subplot(1, 1, 1)ax.imshow(mark_boundaries(image, segments))plt.axis("off")# 展示圖像
plt.show()
參考
https://www.pyimagesearch.com/2014/07/28/a-slic-superpixel-tutorial-using-python/
總結
以上是生活随笔為你收集整理的图像分割:Python的SLIC超像素分割的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 合作社的场地是谁画的呢?
- 下一篇: “气变风凛冽”下一句是什么