2017-03-16 14 views
3

私はDeep LearningとTensorflow初心者です。テンソルフローの画像にヒストグラム等化を実装​​する方法は?

私は顔入力画像で使用するためのcifar10テンソルフローチュートリアルを変更しようとしています。

ヒストグラム均等化はどのように計算できますか?

Histogram equalization of grayscale images with NumPyのようなソリューションをラップすることはできますか?グレースケールuint8画像については

答えて

1

あなたはこのようなものを使用することができます:テスト用

def tf_equalize_histogram(image): 
    values_range = tf.constant([0., 255.], dtype = tf.float32) 
    histogram = tf.histogram_fixed_width(tf.to_float(image), values_range, 256) 
    cdf = tf.cumsum(histogram) 
    cdf_min = cdf[tf.reduce_min(tf.where(tf.greater(cdf, 0)))] 

    img_shape = tf.shape(image) 
    pix_cnt = img_shape[-3] * img_shape[-2] 
    px_map = tf.round(tf.to_float(cdf - cdf_min) * 255./tf.to_float(pix_cnt - 1)) 
    px_map = tf.cast(px_map, tf.uint8) 

    eq_hist = tf.expand_dims(tf.gather_nd(px_map, tf.cast(image, tf.int32)), 2) 
    return eq_hist 

import tensorflow as tf 
import numpy as np 
import cv2 

image_ph = tf.placeholder(tf.uint8, shape = [None, None, 1]) 
image_eq_hist = tf_equalize_histogram(image_ph) 

image = cv2.imread("./test_gs.png", 0) 
image = np.reshape(image, (image.shape[0], image.shape[1], 1)) 
with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
    image_eq_hist_ = sess.run(image_eq_hist, feed_dict = {image_ph : image}) 

cv2.imshow("eq_cv", cv2.equalizeHist(image)) 
cv2.imshow("eq", image_eq_hist_) 
cv2.waitKey() 
関連する問題