運(yùn)用GrabCut輕松玩轉(zhuǎn)摳圖(python實(shí)現(xiàn))

冒泡~好像是很久沒有寫...在實(shí)驗(yàn)室一周多了...在不斷地安裝環(huán)境和庫(kù)赞弥,其他沒有太大的進(jìn)展讯泣,今天在做顯著性圖片的提取中嗦枢,發(fā)現(xiàn)了grabcut的函數(shù)可以用來摳圖,做個(gè)小筆記附鸽。

GrabCut

簡(jiǎn)介

GrabCut該算法利用了圖像中的紋理(顏色)信息和邊界(反差)信息脱拼,只要小量的用戶交互操作即可得到比較好的分割效果

算法原理


補(bǔ)充說明:
【a.矩形外的所有區(qū)域肯定是背景。矩形框內(nèi)的東西是未知的坷备。同樣用戶確定前景和背景的任何操作都不會(huì)被程序改變挪拟。
b.根據(jù)我們的輸入,GMM會(huì)學(xué)習(xí)并創(chuàng)建新的像素分布击你。對(duì)那些分類未知的像素(可能是前景也可能是背景)玉组,可以根據(jù)他們與已知分類(如背景)的像素關(guān)系來進(jìn)行分類(就想在做聚類操作)。
c.圖中的節(jié)點(diǎn)就是像素點(diǎn)丁侄。除了像素點(diǎn)做節(jié)點(diǎn)之外還有兩個(gè)節(jié)點(diǎn):Source_node和Sink_node惯雳。所有的前景像素都和Source_node相連。所有的背景像素都和sink_node相連鸿摇。
d.兩個(gè)像素之間的權(quán)重由邊的信息或者兩個(gè)像素的相似性來決定石景。如果兩個(gè)像素的顏色有很大的不同,那么它們之間的邊的權(quán)重就會(huì)很小拙吉〕蹦酰】

具體的算法原理可參考(https://www.cnblogs.com/mikewolf2002/p/3341418.html

函數(shù)原型

grabCut(img, mask, rect, bgdModel, fgdModel, iterCount, mode=None)

解釋

img:待分割的源圖像,必須是8位3通道(CV_8UC3)圖像筷黔,在處理的過程中不會(huì)被修改往史;
mask:掩碼圖像,如果使用掩碼進(jìn)行初始化佛舱,那么mask保存初始化掩碼信息椎例;在執(zhí)行分割的時(shí)候,也可以將用戶交互所設(shè)定的前景與背景保存到mask中请祖,然后再傳入grabCut函數(shù)订歪;在處理結(jié)束之后,mask中會(huì)保存結(jié)果肆捕。
mask只能取以下四種值:
GCD_BGD(=0)刷晋,背景;
GCD_FGD(=1),前景眼虱;
GCD_PR_BGD(=2)或舞,可能的背景;
GCD_PR_FGD(=3)蒙幻,可能的前景映凳。
如果沒有手工標(biāo)記GCD_BGD或者GCD_FGD,那么結(jié)果只會(huì)有GCD_PR_BGD或GCD_PR_FGD邮破;
rect:用于限定需要進(jìn)行分割的圖像范圍诈豌,只有該矩形窗口內(nèi)的圖像部分才被處理;
bgdModel:背景模型抒和,如果為null矫渔,函數(shù)內(nèi)部會(huì)自動(dòng)創(chuàng)建一個(gè)bgdModel;bgdModel必須是單通道浮點(diǎn)型(CV_32FC1)圖像摧莽,且行數(shù)只能為1庙洼,列數(shù)只能為13x5;
fgdModel:前景模型镊辕,如果為null油够,函數(shù)內(nèi)部會(huì)自動(dòng)創(chuàng)建一個(gè)fgdModel;fgdModel必須是單通道浮點(diǎn)型(CV_32FC1)圖像征懈,且行數(shù)只能為1石咬,列數(shù)只能為13x5;
iterCount:迭代次數(shù)卖哎,必須大于0鬼悠;
mode:用于指示grabCut函數(shù)進(jìn)行什么操作,可選的值有:
GC_INIT_WITH_RECT(=0)亏娜,用矩形窗初始化GrabCut焕窝;
GC_INIT_WITH_MASK(=1),用掩碼圖像初始化GrabCut维贺;
GC_EVAL(=2)它掂,執(zhí)行分割。

代碼實(shí)現(xiàn)

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('F:/8.jpg')
OLD_IMG = img.copy()
mask = np.zeros(img.shape[:2], np.uint8)
SIZE = (1, 65)
bgdModle = np.zeros(SIZE, np.float64)
fgdModle = np.zeros(SIZE, np.float64)
rect = (1, 1, img.shape[1], img.shape[0])
cv2.grabCut(img, mask, rect, bgdModle, fgdModle, 10, cv2.GC_INIT_WITH_RECT)

mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8')
img *= mask2[:, :, np.newaxis]

plt.subplot(121), plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.title("grabcut"), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(cv2.cvtColor(OLD_IMG, cv2.COLOR_BGR2RGB))
plt.title("original"), plt.xticks([]), plt.yticks([])

plt.show()

效果圖

改變iterCount(迭代)的次數(shù)可以改變摳圖的精準(zhǔn)度
(不足幸缕,迭代次數(shù)越多 運(yùn)行所耗的時(shí)間更長(zhǎng))
迭代10次


迭代100次

N次之后

參考資料(https://blog.csdn.net/HuangZhang_123/article/details/80535269
https://blog.csdn.net/sunshine_in_moon/article/details/45200793

Ending~
感覺實(shí)驗(yàn)是要做不出來了群发,只能祈禱畢設(shè)順利了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末发乔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子雪猪,更是在濱河造成了極大的恐慌栏尚,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件只恨,死亡現(xiàn)場(chǎng)離奇詭異译仗,居然都是意外死亡抬虽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門纵菌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阐污,“玉大人,你說我怎么就攤上這事咱圆〉驯伲” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵序苏,是天一觀的道長(zhǎng)手幢。 經(jīng)常有香客問我,道長(zhǎng)忱详,這世上最難降的妖魔是什么围来? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮匈睁,結(jié)果婚禮上监透,老公的妹妹穿的比我還像新娘。我一直安慰自己航唆,他們只是感情好才漆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著佛点,像睡著了一般醇滥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上超营,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天鸳玩,我揣著相機(jī)與錄音,去河邊找鬼演闭。 笑死不跟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的米碰。 我是一名探鬼主播窝革,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼吕座!你這毒婦竟也來了虐译?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤吴趴,失蹤者是張志新(化名)和其女友劉穎漆诽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厢拭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年兰英,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片供鸠。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡畦贸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楞捂,到底是詐尸還是另有隱情薄坏,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布泡一,位于F島的核電站颤殴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鼻忠。R本人自食惡果不足惜涵但,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望帖蔓。 院中可真熱鬧矮瘟,春花似錦、人聲如沸塑娇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽埋酬。三九已至哨啃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間写妥,已是汗流浹背拳球。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留珍特,地道東北人祝峻。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像扎筒,于是被迫代替她去往敵國(guó)和親莱找。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容