问题描述:
计算视差图是分割图像前景和背景的有效方法。本次目标是抓住图像中的人物并丢弃背景。GradCut算法实现步骤:
1. 定義一個包含圖片主題的矩形。
2. 矩形以外的區域被自動定義為背景。
3. 背景中包含的數據作為參考,在用戶定義的矩形內區分背景區域和前景區域。
4. 高斯混合模型 (GMM) 對前景和背景進行建模,並將未定義的像素標記為可能的背景和可能的前景。
5. 圖像中的每個像素都通過虛擬邊緣虛擬連接到周圍的像素,並且每個邊緣被分配為前景或背景的概率,基於它與周圍像素的顏色相似程度。
6. 每個像素(或算法中概念化的節點)都連接到前景或背景節點。
7. 在節點連接到任一終端(背景或前景,也分別稱為源或匯)後,屬於不同終端的節點之間的邊被切割(因此得名 GrabCut)。 因此,圖像被分割成兩部分。
实现步骤:
首先,加載我們要處理的圖像,然後創建一個填充了零的掩碼其形狀與我們加載的圖相同
import numpy as np
import cv2
from matplotlib import pyplot as plt
original = cv2.imread('img/statue_small.jpeg')
img = original.copy()
mask = np.zeros(img.shape[:2],np.uint8)
#create zero-filled background and foreground models
#創建零填充的背景和前景模型
bgdModel = np.zeros((1,65),np.float64)
f