導航:首頁 > 源碼編譯 > matting演算法

matting演算法

發布時間:2024-12-27 20:58:07

A. 圖像分割演算法總結

       圖像處理的很多任務都離不開圖像分割。因為圖像分割在cv中實在太重要(有用)了,就先把圖像分割的常用演算法做個總結。

        接觸機器學習和深度學習時間已經不短了。期間看過各種相關知識但從未總結過。本文過後我會盡可能詳細的從工程角度來總結,從傳統機器學習演算法,傳統計算機視覺庫演算法到深度學習目前常用演算法和論文,以及模型在各平台的轉化,量化,服務化部署等相關知識總結。

        圖像分割常用演算法大致分為下面幾類。由於圖像的能量范函,邊緣追蹤等方法的效果往往只能解決特定問題,效果並不理想,這里不再闡述。當然二值化本身也可以分割一些簡單圖像的。但是二值化演算法較多,我會專門做一個文章來總結。這里不再贅述。

        1.基於邊緣的圖像分割演算法:

            有利用圖像梯度的傳統演算法運算元的sobel,roberts,prewitt,拉普拉斯以及canny等。

            這些演算法的基本思想都是採用合適的卷積運算元,對圖像做卷積。從而求出圖像對應的梯度圖像。(至於為什麼通過如圖1這樣的運算元卷積,即可得到圖像的梯度圖像,請讀者復習下卷積和倒數的概念自行推導)由於圖像的邊緣處往往是圖像像素差異較大,梯度較大地方。因此我們通過合適的卷積核得到圖像的梯度圖像,即得到了圖像的邊緣圖像。至於二階運算元的推導,與一階類似。優點:傳統運算元梯度檢測,只需要用合適的卷積核做卷積,即可快速得出對應的邊緣圖像。缺點:圖像邊緣不一定準確,復雜圖像的梯度不僅僅出現在圖像邊緣,可以能出現在圖像內部的色彩和紋理上。

             也有基於深度學習方法hed,rcf等。由於這類網路都有同一個比較嚴重的缺陷,這里只舉例hed網路。hed是基於FCN和VGG改進,同時引出6個loss進行優化訓練,通過多個層輸出不同scale的粒度的邊緣,然後通過一個訓練權重融合各個層的邊緣結果。hed網路結構如下:

可以得到一個比較完整的梯度圖像,可參考github的hed實現。優點:圖像的梯度細節和邊緣完整性,相比傳統的邊緣運算元要好很多。但是hed對於邊緣的圖像內部的邊緣並不能很好的區分。當然我們可以自行更改loss來嘗試只擬合外部的圖像邊緣。但最致命的問題在於,基於vgg的hed的網路表達能力有限,對於圖像和背景接近,或者圖像和背景部分相融的圖片,hed似乎就有點無能為力了。

        2.基於區域分割的演算法:

            區域分割比較常用的如傳統的演算法結合遺傳演算法,區域生長演算法,區域分裂合並,分水嶺演算法等。這里傳統演算法的思路是比較簡單易懂的,如果有無法理解的地方,歡迎大家一起討論學習。這里不再做過多的分析。

            基於區域和語意的深度學習分割演算法,是目前圖像分割成果較多和研究的主要方向。例如FCN系列的全卷積網路,以及經典的醫學圖像分割常用的unet系列,以及rcnn系列發展下的maskrcnn,以及18年底的PAnet。基於語意的圖像分割技術,無疑會成為圖像分割技術的主流。

            其中,基於深度學習語意的其他相關演算法也可以間接或直接的應用到圖像分割。如經典的圖像matting問題。18年又出現了許多非常優秀的演算法和論文。如Deep-Image-Matting,以及效果非常優秀的MIT的 semantic soft segmentation(sss).

            基於語意的圖像分割效果明顯要好於其他的傳統演算法。我在解決圖像分割的問題時,首先嘗試用了hed網路。最後的效果並不理想。雖然也參考github,做了hed的一些fine-tune,但是還是上面提到的原因,在我多次嘗試後,最終放棄。轉而適用FCN系列的網路。但是fcn也無法解決圖像和背景相融的問題。圖片相融的分割,感覺即需要大的感受野,又需要未相融部分原圖像細節,所以單原FCN的網路,很難做出准確的分割。中間還測試過很多其他相關的網路,但都效果不佳。考慮到感受野和原圖像細節,嘗試了resnet和densenet作為圖像特徵提取的底層。最終我測試了unet系列的網路:

                unet的原始模型如圖所示。在自己拍照爬蟲等手段採集了將近1000張圖片。去掉了圖片質量太差的,圖片內容太過類似的。爬蟲最終收集160多張,自己拍照收集200張圖片後,又用ps手動p了邊緣圖像,採用圖像增強變換,大約有300*24張圖片。原生unet網路的表現比較一般。在將unet普通的卷積層改為resnet後,網路的表達能力明顯提升。在將resnet改為resnet101,此時,即使對於部分相融的圖像,也能較好的分割了。但是unet的模型體積已經不能接受。

                在最後階段,看到maskrcnn的實例分割。maskrcnn一路由rcnn,fasterrcnn發展過來。於是用maskrcnn來加入自己的訓練數據和label圖像進行訓練。maskrcnn的結果表現並不令人滿意,對於邊緣的定位,相比於其他演算法,略顯粗糙。在產品應用中,明顯還不合適。                

        3.基於圖的分割演算法

            基於深度學習的deepgrab,效果表現並不是十分理想。deepgrab的git作者backbone採用了deeplabv2的網路結構。並沒有完全安裝原論文來做。

論文原地址參考: https://arxiv.org/pdf/1707.00243.pdf

整體結構類似於encode和decoder。並沒有太仔細的研究,因為基於resent101的結構,在模型體積,速度以及deeplab的分割精度上,都不能滿足當前的需求。之前大致總結過計算機視覺的相關知識點,既然目前在討論移動端模型,那後面就分模塊總結下移動端模型的應用落地吧。

由於時間實在有限。這里並沒有針對每個演算法進行詳細的講解。後續我會從基礎的機器學習演算法開始總結。

B. 圖像軟摳圖(soft matting) 怎麼做演算法是什麼

function [A]=getLaplacian1(I,consts,epsilon,win_size)

if (~exist('epsilon','var'))
epsilon=0.0000001;
end
if (isempty(epsilon))
epsilon=0.0000001;
end
if (~exist('win_size','var'))
win_size=1;
end
if (isempty(win_size))
win_size=1;
end

neb_size=(win_size*2+1)^2;
[h,w,c]=size(I);
n=h; m=w;
img_size=w*h;
consts=imerode(consts,ones(win_size*2+1));

indsM=reshape([1:img_size],h,w);

tlen=sum(sum(1-consts(win_size+1:end-win_size,win_size+1:end-win_size)))*(neb_size^2);

row_inds=zeros(tlen ,1);
col_inds=zeros(tlen,1);
vals=zeros(tlen,1);
len=0;
for j=1+win_size:w-win_size
for i=win_size+1:h-win_size
if (consts(i,j))
continue
end
win_inds=indsM(i-win_size:i+win_size,j-win_size:j+win_size);
win_inds=win_inds(:);
winI=I(i-win_size:i+win_size,j-win_size:j+win_size,:);
winI=reshape(winI,neb_size,c);
win_mu=mean(winI,1)';
win_var=inv(winI'*winI/neb_size-win_mu*win_mu' +epsilon/neb_size*eye(c));

winI=winI-repmat(win_mu',neb_size,1);
tvals=(1+winI*win_var*winI')/neb_size;

row_inds(1+len:neb_size^2+len)=reshape(repmat(win_inds,1,neb_size),...
neb_size^2,1);
col_inds(1+len:neb_size^2+len)=reshape(repmat(win_inds',neb_size,1),...
neb_size^2,1);
vals(1+len:neb_size^2+len)=tvals(:);
len=len+neb_size^2;
end
end

vals=vals(1:len);
row_inds=row_inds(1:len);
col_inds=col_inds(1:len);
A=sparse(row_inds,col_inds,vals,img_size,img_size);

sumA=sum(A,2);
A=spdiags(sumA(:),0,img_size,img_size)-A;

C. 如何驅除濃霧作業

清除濃霧
清除濃霧(寰宇譯︰霧氣打散,日文︰きりばらい,英文︰Defog)是第四世代引入的飛行屬性招式。[1]
中文名
清除濃霧
外文名
きりばらい
招式附加效果
對戰中
令目標的閃避率降低1級。清除場上的霧天氣。
只要此招式成功使出,無論是否降低了目標的閃避率,都會移除對方場地上的白霧、光牆、反射壁、極光幕和神秘守護,移除雙方場地上的撒菱、隱形岩、毒菱和黏黏網。
如果目標處於替身狀態,則雖然閃避率不會降低,但後續效果仍然發生。
清除濃霧一定會命中,除非目標正在使用蓄力的招式並不在場地上。
如果對手被白霧保護,則對手閃避率不會降低,但白霧隨之被清除。
對戰外
消除霧天氣。DPPt
招式變更
第六世代
去除對方場地的撒菱、隱形岩、毒菱和黏黏網 → 雙方
一般來說,秋冬早晨霧特別多,為什麼呢?我們知道,當空氣容納的水汽達到最大限度時,就達到了飽和。而氣溫愈高,空氣中所能容納的水汽也愈多。1立方米的空氣,氣溫在4℃時,最多能容納的水汽量是6.36克;而氣溫是20℃時,1立方米的空氣中最多可以含水汽量是17.30克。如果空氣中所含的水汽多於一定溫度條件下的飽和水汽量,多餘的水汽就會凝結出來,當足夠多的水分了與空氣中微小的灰塵顆粒結合在一起,同時水分子本身也會相互粘結,就變成小水滴或冰晶。空氣中的水汽超過飽和量,凝結成水滴,這主要是氣溫降低造成的。
如果地面熱量散失,溫度下降,空氣又相當潮濕,那麼當它冷卻到一定的程度時,空氣中一部分的水汽就會凝結出來,變成很多小水滴,懸浮在近地面的空氣層里,這就是霧。它和雲都是由於溫度下降而造成的,霧實際上也可以說是靠近地面的雲。
白天溫度比較高,空氣中可容納較多的水汽。但是到了夜間,溫度下降了,空氣中能容納的水汽的能力減少了,因此,一部分水汽會凝結成為霧。特別在秋冬季節,由於夜長,而且出現無雲風小的機會較多,地面散熱較夏天更迅速,以致使地面溫度急劇下降,這樣就使得近地面空氣中的水汽,容易在後半夜到早晨達到飽和而凝結成小水珠,形成霧。秋冬的清晨氣溫最低,便是霧最濃的時刻

閱讀全文

與matting演算法相關的資料

熱點內容
微信加密怎麼加不上去 瀏覽:151
月什麼影視app 瀏覽:945
最強腦洞小游戲誰是程序員 瀏覽:852
三星手機如何互傳安全文件夾內容 瀏覽:97
高校plus網課平台源碼 瀏覽:479
javaswing詳解 瀏覽:918
高仿產品可以在什麼APp上賣 瀏覽:183
什麼app可以玩摩托車 瀏覽:881
python異常值的確定及處理方法 瀏覽:599
在vi編輯器中設置行號的命令是 瀏覽:56
phptoken生成演算法 瀏覽:751
存儲編程是什麼 瀏覽:33
visualfoxpro命令編寫 瀏覽:620
基於單片機的搶答器的設計 瀏覽:775
湖州兼職程序員攻略 瀏覽:108
關於政務雲介面伺服器的申請 瀏覽:186
網路通訊加密了會安全嗎 瀏覽:386
門禁卡加密了還能用嗎 瀏覽:911
樁基礎地梁加密 瀏覽:973
如何檢驗安卓機速度 瀏覽:227