9

研究論文で説明されているように、エネルギー最小化の概念を使用して、特定の画像から髪を抽出しようとしていました。エネルギー関数は、事前確率と 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 に変更しても、出力には影響しませんか?

誰かがこの文脈に光を当てることができれば、非常に感謝しています。

4

0 に答える 0