Tensorflow – 为图像张量中的每个像素寻找最大的3个邻居像素

我正在努力定位像素邻域中最大的k个像素。输入是nonetype动态图像张量。

versions:-tensorflow 1.2-gpu-python 3.5

为了提取图像张量中每个像素的邻居,我创建了一个眼形滤波器:

w = np.eye(9).reshape((3, 3, 1, 9))weights=tf.constant(w,tf.float32)pixel_determ= tf.nn.conv2d(patches_batch, weights, strides=[1, 1, 1, 1], padding='SAME') #shape=(8, 183, 275, 9)

结果张量的深度将为9,包括邻居和中心像素值本身。

我需要做的是为图像的每个像素沿深度方向定位3个最大值(位置必须保留),并为最大的3个值分配True"1",其余分配"0"False

我对tf.nn.top_k函数有点困惑。我无法得到正确的索引。此外,我还没有尝试过,但看起来它不接受None类型的数据。有没有一些技巧或其他方法可以做到这一点?

如果我能得到任何帮助,我将非常感激。提前感谢你。


回答:

我想我已经找到了一个解决方案

def biggest_k_indices(mat, k):    _, indices_mat =tf.nn.top_k(mat, tf.shape(mat)[3], sorted=False)    _, indices_k =tf.nn.top_k(mat, k, sorted=False)    index= []    eq =[]    for i in range(k):        index.append(tf.expand_dims(indices_k[:,:,:,i],-1))        eq.append(tf.equal(indices_mat,index[i]))    bool_comb =tf.logical_or(eq[0],eq[1])    if (k==2):        index.clear()         eq.clear()        return bool_comb    for i in eq[2:]:        bool_comb=tf.logical_or(bool_comb,i)    index.clear()    eq.clear()    return bool_comb

在这个函数中,我在循环中将张量的索引与k个最大的索引逐一进行比较。然后通过tf.logical_or帮助,我将True值收集到一个单一的张量bool_comb中。我仅用一个测试数组进行了测试。所以我不确定它是否会100%工作。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注