我将图像作为张量对象读取,目的是成为一个面具。
现在,我想用0替换接近白色(接近1.0)的值 和值为灰色的值。
然后掩码对我的机器学习任务是正确的。
我尝试过:
tf.where(imag >= 1.0)
或下一个函数也会返回索引
greater = tf.greater_equal(mask, 0.95)
但如何更新/分配0? scatter_nd_add对我不起作用。
mask = tf.scatter_nd_add(mask, greater, 0)
编辑:
我尝试的方式不同:
v_mask = tf.Variable(tf.shape(mask))
ind = tf.to_float(mask >= 0.0)
v_mask.assign(ind)
但如果我运行会话。它停在那里,不会继续。
我真正想做的事: 我有一个带尺寸的灰色图像(mxnx1,tensor,float32),值从[0,255]重新调整为[0,1]。
我想将所有白色(1)的值替换为0,将灰色(0.45 - 0.55)替换为1,其余值应该是未定义的。
答案 0 :(得分:0)
要使图像达到阈值,您可以使用:
thim = tf.tofloat(im >= 0.95) # or to whichever type you use
要将结果重新分配给im
,假设它是一个变量:
im_update = im.assign(thim)
这为您提供了一个需要调用以进行更新的更新操作。
如果im
不是变量,则无法为其重新分配值。但一般情况下,您确实需要将值重新分配给节点的情况很少。
答案 1 :(得分:0)
我发现一种解决方法是使用numpy()桥。在numpy数组上执行numpy操作,并且在张量值中也是如此。这是因为numpy数组和pytorch张量使用相同的基础内存位置。
pytorch入门教程here
中提到了内存共享