У меня есть набор данных изображений в виде тензоров с каждым пикселем, имеющим значение от 0 до 1, и у меня есть набор "бинов".
bins = [0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95]
Я хочу вернуть тензор с каждым пикселемзначение, являющееся его ближайшей корзиной.Например, если пиксель равен 0,03, он превратится в 0,05, если пиксель равен 0,79, он превратится в 0,75.
Я хочу, чтобы это было сделано с тензорами, а не с нулевыми значениями.
Вот он, работает с тряпичным потоком, однако тензорный поток кажется совершенно другим зверем, когда дело доходит до итерации.Я пробовал tf.map_fn и tf.scan перебирать, но не смог заставить его работать.
def valueQuant(picture, splitSize):
#This is the Picture that will be returned
Quant_Pic = np.zeros((picture.shape[0], picture.shape[1]))
#go through each pixel of the image
for y_col in range(picture.shape[0]):
for x_row in range(picture.shape[1]):
#isolate regions based on value
for i in range(splitSize):
#low and high values to isolate
lowFloatRange = float((1/splitSize)*i)
highFloatRange = float((1/splitSize)*(i+1))
#value to turn entire clustor
midRange = lowFloatRange + ((highFloatRange - lowFloatRange)/2)
#current value of current pixel
curVal = picture[y_col][x_row]
#if the current value is within the range of interest
if(curVal >= lowFloatRange and curVal <= highFloatRange):
Quant_Pic[y_col][x_row] = midRange
return Quant_Pic
Мне удалось найти поэлементный метод, используя только методы тензорного потока.
def quant_val(current_input):
bins = tf.constant([0.05, 0.15, 0.25, 0.35, 0.45, 0.55, 0.65, 0.75, 0.85, 0.95])
dist = tf.tile(current_input, [10])
dist = tf.math.subtract(bins, current_input)
absDist = tf.math.abs(dist)
idx = tf.math.argmin(absDist)
output = bins[idx]
output = tf.expand_dims(output, 0)
print("output", output)
return output
current_input = tf.constant([0.53])
quant_val(current_input)
Это может вернуть правильный ответ для тензора с одним значением,но я не уверен, как экстраполировать это на большую структуру тензора изображения.Любая помощь приветствуется!!!Спасибо, добрые мудрые.