我是深度学习和Tensorflow的新手。
我正在尝试修改cifar10 tensorflow教程以将其用于面部输入图像。
如何计算直方图均衡化?
对于灰度uint8图像,可以使用如下所示的内容:
uint8
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()