研究論文で説明されているように、エネルギー最小化の概念を使用して、特定の画像から髪を抽出しようとしていました。エネルギー関数は、事前確率と YCrCb 色尤度ヒストグラムの両方に依存します。エネルギー関数は次のように定義されます。
(x)= data(x)+smooth(x).
data (x)=−∑(log(I(x)|x)+logsel (x)) [事前確率モデル]
Smooth (x) = ∑ (x ≠x )exp(-||(x)−(x)||^2/) [以前の YcrCb カラー モデル]
指定されたグラフにラベルを付ける方法に混乱しています(画像のピクセルはグラフのノードとして扱われます)。次のアプローチを使用してグラフにラベルを付けようとしましたが、結果は期待どおりではありません。
def get_Edata(prob_dist, ycrcb_dist, img_y, img_x, pix):
e_data = 0
Y, Cr, Cb = pix
if ycrcb_dist[int(Y/4)][int(Cr/4)][int(Cb/4)] > 0 and prob_dist[img_y][img_x]>0:
e_data = -1*(math.log(ycrcb_dist[int(Y/4)][int(Cr/4)][int(Cb/4)], 10) + math.log(prob_dist[img_y][img_x], 10))
return e_data
def get_ESmooth(normalization_constant, pix_1, pix_2):
return math.exp(-(math.ceil(pix_1[0] - pix_2[0])**2)/normalization_constant)
そして、グラフのノード間に重みを追加しながら、次を使用します。
#adding the edges between neighbouring pixels.
img_graph.add_edge(central_node, neighbour_nodes, eSmooth, 0)
#adding the edges from source to node and from node to sink.
img_graph.add_tedge(central_node, weight_source, max_val_weight-source)
値をより低い整数に変更すると比較的良い結果が得られるため、問題はにあると思いmax_val_weight-source
ますが、それは正しい方法ではありません。
また、eSmooth の値を 0 に変更しても、出力には影響しませんか?
誰かがこの文脈に光を当てることができれば、非常に感謝しています。