如何在张量流中实现图像的直方图均衡化? [英] How to implement histogram equalization for images in tensorflow?
本文介绍了如何在张量流中实现图像的直方图均衡化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是深度学习和Tensorflow的新手.
I'm a Deep Learning and Tensorflow novice.
我正在尝试修改cifar10 tensorflow教程,以将其用于面部输入图像.
I'm trying to modify cifar10 tensorflow tutorial for using it with faces input images.
如何计算直方图均衡化?
How can I compute histogram equalization?
是否可以将类似于以下解决方案的解决方案包装在以下内容中: NumPy制作灰度图像吗?
Is it possible to wrap solutions similar to the one in: Histogram equalization of grayscale images with NumPy ?
推荐答案
对于灰度uint8
图像,您可以使用类似以下内容的东西:
For grayscale uint8
image you can use something like this:
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()
这篇关于如何在张量流中实现图像的直方图均衡化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文