我正在尝试将一些 python 代码转换为 C#,这个数组语法是什么?

我正在尝试将 python 中的几行代码转换为 C#。


在 C# 版本中,我对以 heatmap_center 变量开头的列表/数组语法感到困惑。


在下面的片段中,heatmap_with_borders 变量的用途是什么?


这是Python片段:


def extract_keypoints(heatmap, all_keypoints, total_keypoint_num):

    heatmap[heatmap < 0.1] = 0

    heatmap_with_borders = np.pad(heatmap, [(2, 2), (2, 2)], mode='constant')

    heatmap_center = heatmap_with_borders[1:heatmap_with_borders.shape[0]-1, 1:heatmap_with_borders.shape[1]-1]

    heatmap_left = heatmap_with_borders[1:heatmap_with_borders.shape[0]-1, 2:heatmap_with_borders.shape[1]]

    heatmap_right = heatmap_with_borders[1:heatmap_with_borders.shape[0]-1, 0:heatmap_with_borders.shape[1]-2]

    heatmap_up = heatmap_with_borders[2:heatmap_with_borders.shape[0], 1:heatmap_with_borders.shape[1]-1]

    heatmap_down = heatmap_with_borders[0:heatmap_with_borders.shape[0]-2, 1:heatmap_with_borders.shape[1]-1]


    heatmap_peaks = (heatmap_center > heatmap_left) &\

                    (heatmap_center > heatmap_right) &\

                    (heatmap_center > heatmap_up) &\

                    (heatmap_center > heatmap_down)

    heatmap_peaks = heatmap_peaks[1:heatmap_center.shape[0]-1, 1:heatmap_center.shape[1]-1]

    keypoints = list(zip(np.nonzero(heatmap_peaks)[1], np.nonzero(heatmap_peaks)[0]))  # (w, h)

    keypoints = sorted(keypoints, key=itemgetter(0))


    suppressed = np.zeros(len(keypoints), np.uint8)

    keypoints_with_score_and_id = []

    keypoint_num = 0

    for i in range(len(keypoints)):

        if suppressed[i]:

            continue

        for j in range(i+1, len(keypoints)):

            if math.sqrt((keypoints[i][0] - keypoints[j][0]) ** 2 +

                         (keypoints[i][1] - keypoints[j][1]) ** 2) < 6:

                suppressed[j] = 1

喵喵时光机
浏览 63回答 2
2回答

ITMISS

np.pad 似乎在整个热图周围添加了 2 个“像素”边框。因此,如果热图为 124x124,则结果将是 128x128 热图。现在我们来简化一下heatmap_center&nbsp;=&nbsp;heatmap_with_borders[1:heatmap_with_borders.shape[0]-1,&nbsp;1:heatmap_with_borders.shape[1]-1]我们将从heatmap_with_borders[1:heatmap_with_borders.shape[0]-11:heatmap_with_borders.shape[0]-1表示将项目从1拉到维度-1的大小在我们的 128,128 示例中,维度将为 128,所以我们说:从 1 到 127具体如此简化heatmap_center&nbsp;=&nbsp;heatmap_with_borders[1:127,&nbsp;1:127]因此,您只需跳过 2 像素边框的外部 1“像素”。在 C# 中,没有原生的“拉出列表的一部分”语法,因此您需要一个类似的方法getSublist(heatmap,&nbsp;start1,&nbsp;end1,&nbsp;start2,&nbsp;end2)所以你的电话看起来像heatmap_center&nbsp;=&nbsp;getSublist(heatmap,&nbsp;1,&nbsp;heatmap.Length&nbsp;-&nbsp;1,&nbsp;1,&nbsp;heatmap[0].Length&nbsp;-1)我的建议是,如果您非常关心 C#,请自行实现此功能,以便在 C# 中轻松使用它,然后如果速度太慢,请找到具有类似功能的库。

不负相思意

至于您的具体问题“在下面的片段中, heatmap_with_borders 变量的用途是什么?”看起来它添加了 2 个“像素”边框。该算法似乎根据相邻像素制作某种热图。假设需要 1 像素偏移裁剪,然后查看中心裁剪和 1 像素裁剪哪个更大。因此,边框可以“填充”热图,从而使所有轻微的“作物”保持相同的大小和范围。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python