matlab偏微分图像修复,图像修复 Region filling and object removal by exemplar-based image inpainting matlab实现...
介紹
本代碼是對Region filling and object removal by exemplar-based image inpainting的MATLAB實現(xiàn),用來對圖像進行區(qū)域填充、物體移除。
算法
如圖1所示,為算法偽代碼。
圖1 算法偽代碼
區(qū)域劃分
實現(xiàn)這個算法,首先需要進行圖像區(qū)域的劃分。如圖2所示,
為目標區(qū)域,是需要進行填充的區(qū)域,
為源區(qū)域,作為填充數(shù)據(jù)的來源。
的邊界為
。如果從像素值來看的話,可以將目標區(qū)域的像素值設(shè)置為0,但是0在圖像中為黑色的意思,所以最好可以有一個輔助數(shù)組來標志缺失區(qū)域。
圖2 區(qū)域劃分與邊界
計算邊界區(qū)域
使用下面的代碼可以方便地計算出邊界點的位置。map是一個二值數(shù)組,只有0、1,其中1表示缺失像素值所在位置。計算出來的結(jié)果result中,1所在的位置就是邊界點所在的位置。
result = imdilate(map, se) - map;
優(yōu)先級的計算公式
邊界上有很多像素點,以這些點為中心可以得到很多patch(比如9×9的patch),對于這些patch,都需要計算一下他們的優(yōu)先級是多少,以便從中選出一個優(yōu)先級最大的塊作為首要修復的對象。
對于一個patch,塊的優(yōu)先級計算公式:
其中,
代表這個待修復塊的中心點,
表示塊的置信度,
為data term。
置信度的計算公式是:
其中,
表示置信度,其中
為整張圖像,
為
的缺失區(qū)域,
為待填充的塊,
為塊的面積。
為塊中的像素點的置信度,在初始化的時候,已存在的像素點的置信度為1,缺失的像素點的置信度為0,在修復過程中,修復出來的像素點的置信度被更新為塊的置信度
,由此可知,隨著修復過程的推進,修復出來的像素點的置信度會越來越小。
data term的計算公式為:
公式3,這里是等照度向量與法向量
的點乘再求模長,
為歸一化因子。
在計算等照度向量的時候需要先計算
點的image gradient,等照度線向量為gradient逆時針旋轉(zhuǎn)90°,gradient代表了像素值變化最快的方向,而等照度線向量與gradient垂直,代表了變化最慢的方向。
image gradient
暴力搜索
計算出每一個patch的優(yōu)先級之后,從中選出一個優(yōu)先級最高的patch作為待修復對象,如
。再使用暴力法,從源區(qū)域中選出一個與之最相近的塊
,將
中對應的像素拷到
中(這里只需要修復
中缺失的像素點)。使用暴力法的時候,衡量兩個塊之間的距離時,使用SSD(差的平方和)作為距離,由于
本身就缺失了部分像素值,所以計算的就是
非缺失像素和其他patch對應位置像素值的SSD。
注意,在修復過程的迭代中,缺失區(qū)域逐漸變小,但是提供像素來源的目標區(qū)域固定不變。因為目標區(qū)域中,修復出來的像素值可信度比較低,不予以采用。
效果
原圖
缺失信息
修復之后
參考文獻
Criminisi A, Pérez P, Toyama K. Region filling and object removal by exemplar-based image inpainting[J]. IEEE Transactions on image processing, 2004, 13(9): 1200-1212.
Criminisi A, Perez P, Toyama K. Object removal by exemplar-based inpainting[C]//Computer Vision and Pattern Recognition, 2003. Proceedings. 2003 IEEE Computer Society Conference on. IEEE, 2003, 2: II-II.
https://github.com/IouJenLiu/Region-Filling-and-Object-Removal
總結(jié)
以上是生活随笔為你收集整理的matlab偏微分图像修复,图像修复 Region filling and object removal by exemplar-based image inpainting matlab实现...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Debian的安装
- 下一篇: win7系统打开计算机怎么不显示磁盘分区