Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:中心数组图像_Python_Image_Scikit Image - Fatal编程技术网

Python:中心数组图像

Python:中心数组图像,python,image,scikit-image,Python,Image,Scikit Image,使用skimage库,我必须将这些图像居中。我已经找到了应该可以接受偏移量的相似变换,但是缺少文档。我如何检测这样图像的角点,然后确定如何将其居中? 阵列始终存在于28x28个映像中。有些图像中有噪声,就像这里的第二个图像,代表一个4。我不小心抓到了两个非常居中的图像,但它们可以在阵列中的任何位置。 在底部,您还可以看到4的更多视觉表示 [[ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

使用skimage库,我必须将这些图像居中。我已经找到了应该可以接受偏移量的
相似变换
,但是缺少文档。我如何检测这样图像的角点,然后确定如何将其居中? 阵列始终存在于28x28个映像中。有些图像中有噪声,就像这里的第二个图像,代表一个4。我不小心抓到了两个非常居中的图像,但它们可以在阵列中的任何位置。 在底部,您还可以看到4的更多视觉表示

[[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  11 203 229  32   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  26  47  47  30  95 254 215  13   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0  45 154 185 185 223 253 253 133 175 255 188  19   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0 110 253 253 253 246 161 228 253 253 254  92   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0 128 245 253 158 137  21   0  48 233 253 233   8   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0 139 254 223  25   0   0  36 170 254 244 106   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0  55 212 253 161  11  26 178 253 236 113   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   7 155 253 228  80 223 253 253 109   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0 141 253 253 253 254 253 154  29   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0 110 253 253 253 254 179  38   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   3 171 254 254 254 179   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0 171 253 253 253 253 178   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0  26 123 254 253 203 156 253 200   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0  93 253 254 121  13  93 253 158   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0  64 239 253  76   8  32 219 253 126   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0 133 254 191   0   5 108 234 254 106   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0 132 253 190   5  85 253 236 154   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0 153 253 169 192 253 253  77   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0 112 253 253 254 236 129   9   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0  17 118 243 191 113   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]]

[[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  42 164 252  63   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0  23  34   0 244 254 112   0   0   0   0  85   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   4 190 225   0 255 185  13   0   0   0   0  95   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   6 170 254 197  64 254  59   0   0   0   0   0  95   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   9 132 254 204  23 112 254  28   0   0   0   0   0  77   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   6 167 254 216  58  24 242 225  16   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0  76 254 254 162  85 138 254 188   0   0   0  48  85  25   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   3 159 254 254 254 254 254 228 151 151 214 250 254  75   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   7  79 131 158 254 254 226 225 225 225 190 148  39   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0 127 254 148   0   0   0   0   0   0   0  71   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0  23 248 201   0   0   0   0   0   0   0   0  36   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0  85 254 118   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0  12 189 227  22   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0 114 254 103   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0  44 226 175   8   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0 148 203  59   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0  26 242 140   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0 131 169  22   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0  19 233  65   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0 174 109   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]]

解决方案代码: @anmol_uppal提供的代码略有更改

def pad_image(img, pad_t, pad_r, pad_b, pad_l):
    """Add padding of zeroes to an image.
    Add padding to an array image.
    :param img:
    :param pad_t:
    :param pad_r:
    :param pad_b:
    :param pad_l:
    """
    height, width = img.shape

    # Adding padding to the left side.
    pad_left = np.zeros((height, pad_l), dtype = np.int)
    img = np.concatenate((pad_left, img), axis = 1)

    # Adding padding to the top.
    pad_up = np.zeros((pad_t, pad_l + width))
    img = np.concatenate((pad_up, img), axis = 0)

    # Adding padding to the right.
    pad_right = np.zeros((height + pad_t, pad_r))
    img = np.concatenate((img, pad_right), axis = 1)

    # Adding padding to the bottom
    pad_bottom = np.zeros((pad_b, pad_l + width + pad_r))
    img = np.concatenate((img, pad_bottom), axis = 0)

    return img

def center_image(img):
    """Return a centered image.
    :param img:
    """
    col_sum = np.where(np.sum(img, axis=0) > 0)
    row_sum = np.where(np.sum(img, axis=1) > 0)
    y1, y2 = row_sum[0][0], row_sum[0][-1]
    x1, x2 = col_sum[0][0], col_sum[0][-1]

    cropped_image = img[y1:y2, x1:x2]

    zero_axis_fill = (images[0].shape[0] - cropped_image.shape[0])
    one_axis_fill = (images[0].shape[1] - cropped_image.shape[1])

    top = zero_axis_fill / 2
    bottom = zero_axis_fill - top
    left = one_axis_fill / 2
    right = one_axis_fill - left

    padded_image = pad_image(cropped_image, top, left, bottom, right)

    return padded_image

# Usage is in a for loop that iterates through 60.000 images.
for item in permuList:
        shuImages.append(center_image(images[item]).reshape((28 * 28)))
因此,问题的第一部分是找到包含图像的边界框,第二部分涉及图像居中,第二部分我们将为边界框的每个顶点添加填充

col_sum = np.where(np.sum(a, axis = 0)>0)
row_sum = np.where(np.sum(a, axis = 1)>0)
y1, y2 = row_sum[0][0], row_sum[0][-1]
x1, x2 = col_sum[0][0], col_sum[0][-1]
print x1, y1
print x2, y2 
第1部分:

要绘制边界框,方法是我们可以迭代每一行,找到一行包含1个或多个非零元素,从顶部和底部执行此过程,我们将获得
Y轴
X轴
的限制,通过迭代列,Numpy提供了一些很棒的函数,例如,我们将使用此函数检查行/列是否有任何非零字符,在这种情况下,
sum>0

设(x1,y1)为左上角坐标,(x2,y2)为右下角坐标,这两点足以定义边界框

col_sum = np.where(np.sum(a, axis = 0)>0)
row_sum = np.where(np.sum(a, axis = 1)>0)
y1, y2 = row_sum[0][0], row_sum[0][-1]
x1, x2 = col_sum[0][0], col_sum[0][-1]
print x1, y1
print x2, y2 
第二部分:

现在我们必须将图像居中,而不是计算每侧所需的填充,我们只需将图像裁剪为边界框的形状,然后对每侧应用相等的填充

def add_padding(img, pad_l, pad_t, pad_r, pad_b):
    height, width = img.shape
    #Adding padding to the left side.
    pad_left = np.zeros((height, pad_l), dtype = np.int)
    img = np.concatenate((pad_left, img), axis = 1)

    #Adding padding to the top.
    pad_up = np.zeros((pad_t, pad_l + width))
    img = np.concatenate((pad_up, img), axis = 0)

    #Adding padding to the right.
    pad_right = np.zeros((height + pad_t, pad_r))
    img = np.concatenate((img, pad_right), axis = 1)

    #Adding padding to the bottom
    pad_bottom = np.zeros((pad_b, pad_l + width + pad_r))
    img = np.concatenate((img, pad_bottom), axis = 0)

    return img

cropped_image = img[y1:y2, x1:x2]
padded_image = add_padding(cropped_image, 20, 20, 20, 20)

我对这件事很感兴趣,碰巧也在处理同一个问题,我很乐意帮助你,请解释更多?这是输入还是预期输出?在上面的例子中,图像似乎居中。这是输入。我不小心抓到了一张非常正中的图片。还有几千张这样的图片,而且每张图片都不一样。检测这些图片的角点的答案是什么?你能用逗号分隔的格式粘贴输入吗?这些空格妨碍了我将数据转换为其他类型。@Ben,这是否意味着
axis=1
将获得行数?太好了!看起来很好,谢谢。我对它做了一些修改,以保持28x28的比率。当我完成并且一切就绪后,我将发布编辑后的代码。如果使用
np.pad
skimage.measure.regionprops(image!=0)
(返回边界框和剪切图像),应该可以简化这一过程。