caffe调整图像使所有值为0

时间:2016-01-05 12:20:25

标签: python image-processing neural-network deep-learning caffe

使用caffe从图像生成HDF5数据文件时遇到了这个问题。

caffe.io.load_image将图像加载到归一化范围0-1的变量中。

调整大小,但img中的所有值都转换为零

    img = caffe.io.load_image( patht_to_file )
    print img.shape
    print img.dtype
    img = caffe.io.resize( img, (3,SIZE, SIZE) ) #resizes but all values in img converted to zero
    print img.shape
    print img.dtype

我得到的输出是

  (240, 320, 3) 
  float32
  (3, 58, 58) 
  float64

img的值会因某些值而更改为全部0&#39 任何人都可以帮我解决这个问题。

我希望同样的float32改变resize命令的顺序给出正确的输出 为var img 提供真正的非零值 但订单和类型不是我需要的

img = caffe.io.resize( img, (SIZE, SIZE, 3) ) # Gives real non zero values to var img
print img.shape
print img.dtype

输出

(240, 320, 3) 
float32
(58, 58, 3) 
float64

我需要将形状设置为3,58,58而不将所有值转换为零,即实际数据

1 个答案:

答案 0 :(得分:5)

出了什么问题?

您的img是一个三维数组,但不同的维度有不同的含义。前两个(240,320)空间维度,而第三个(3)是“渠道”(或“要素”)维度。当resize想要更改空间维度的图像,甚至混合(插入)相邻值时,您总是希望保持通道完整:您不想混合“红色“值以决定相邻像素的”绿色“值。

在caffe中,为了拍摄形状(240,320,3)的输入图像并将其转换为形状(3,58,58),您需要执行两个的事情:
 1.使用(240,320)空间维度从(58,58)更改为caffe.io.resize_image。此阶段的结果为img(58,58,3)  2.第二阶段是移动/ transpose img的维度,以便渠道维度成为第一个:img.transpose((2,0,1))

解决方案:

# first, resize the spatial dimensions, do not touch the channels
img = caffe.io.resize_image( img, (SIZE,SIZE), interp_order=3 )
# transpose the dimensions from H-W-C to C-H-W
img = img.transpose( (2,0,1) )

有关详细信息,请参阅resize_image

PS,
将RGB图像更改为BGR也很常见。你跳过了这个阶段。这是故意的吗?