github位址
鑑於邊界點等效果較差,採取兩種措施
(1)使用bfs思想平滑。通過常識我們知道,相鄰畫素之間的深度值不會差別很大。從這種想法出發,選取基本點,然後用bfs方法減少相鄰的畫素之間的深度值差。主要**如下
import queue
# 從中心點開始,bfs向外擴充套件,將變化大的點的深度值平滑
# x,y為中心,img為深度值,gap為相鄰元素深度值最大差,diff為深度值差合理範圍
def bfs_smooth(x,y,img,gap,diff):
q = queue.queue()
visited = np.mat(np.zeros((x,y)))
mid_x = int(x/2)
mid_y = int(y/2)
q.put((mid_x,mid_y))
visited[mid_x,mid_y]=1
while not q.empty():
cx,cy = q.get()
before = img[cx][cy]
for i in range(-1,2):
for j in range(-1,2):
new_x = cx+i
new_y = cy+j
if(img[new_x][new_y]!=0 and visited[new_x,new_y] == 0 ):
visited[new_x,new_y] = 1
q.put((new_x,new_y))
if(abs(int(img[new_x][new_y])-int(before))before):
img[new_x][new_y] = before+gap
else:
img[mid_x][i] = before
(2)在前後拼接時,若出現相互交叉的情況,將深度值設為中間值
for i in range(lenth):
q1 = pointdepth[i]
q2 = back_pointdepth[i]
if(q1[2]>q2[2]):
mid = (q1[2]+q2[2])/2
pointdepth[i][2] = mid
back_pointdepth[i][2] = mid
以我們一位同學為例,得到其模型(可以當頭像了23333)
正面
側面
其他角度
可以發現,深度值似乎存在一些問題(肚子,腿等姿態),這與相機引數有關
這涉及到世界座標系、相機座標系、影象座標系和畫素座標系之間的轉換關係,
這幾篇博文有較為詳細的介紹
真實的xyz座標通過如下計算
# camera_factor 縮放因子
# camera_cx 相機位置
# camera_cy 相機位置
# camera_fx 相機焦距
# camera_fy 相機焦距 一般與camera_fx相等
camera_factor = 1000;
camera_cx = 78.4;
camera_cy = 125.5;
camera_fx = 560.0;
camera_fy = 560.0;
newz = z / camera_factor;
newx = (x - camera_cx) * newz / camera_fx;
newy = (y - camera_cy) * newz / camera_fy;
f=10
return round(newx,f),round(newy,f),round(newz,f)
PhotoWakeUp 創新實訓(2)
由於時間原因,先給出了大致的總結提綱,具體內容明後天補上qnq 這週的主要工作是將人體從背景中分割出來。中提到了mask r cnn 和dense crf方法,似乎不理想 趁著這幾個機會學習了instance segmentation,semantic segmentation的區別。找到一張十分合...
PhotoWakeUp 創新實訓 4
再讀 正面的身體自遮擋部位區域填充 使用patchmatch 4 方法 處理背部紋理是乙個開放的研究問題 27,10,28 文中給了兩種方法 1 將正面文理映象貼到背面 2 使用可選的使用者指南進行繪製。前後紋理用泊松混合縫合 32 運動序列來自 9 他們有個ui介面,可以提供紋理填充方式選擇和姿態...
「photo wake up」創新專案實訓開題總結
專案名稱 photo wake up 基於二維影象的三維人體模型重建 專案背景 哈利波特 世界裡有一種神奇的魔法報紙,報中 上的人物可以動起來,看起來有點像 gif 圖。在故事裡這當然是 魔法 的功勞,現實世界中還沒有造出這樣的報紙。我們想通過現有對影象的研究,使用ai演算法,實現這個過程。華盛頓大...