2017-01-29 4 views
0

Я попытался представить себе эффект keras кадрирования 2D, используя следующий фрагмент кода:Keras Cropping2D меняет цвет канала

from keras import backend as K 
from keras.layers.convolutional import Cropping2D 
from keras.models import Sequential 
# with a Sequential model 
model = Sequential() 
model.add(Cropping2D(cropping=((22, 0), (0, 0)), input_shape=(160, 320, 3))) 
cropping_output = K.function([model.layers[0].input], 
            [model.layers[0].output]) 
cropped_image = cropping_output([image[None,...]])[0] 
compare_images(image, 
       cropped_image.reshape(cropped_image.shape[1:])) 

Вот функция зарисовки:

def compare_images(left_image, right_image):  
    print(image.shape) 
    f, (ax1, ax2) = plt.subplots(1, 2, figsize=(24, 9)) 
    f.tight_layout() 
    ax1.imshow(left_image) 
    ax1.set_title('Shape '+ str(left_image.shape), 
        fontsize=50) 
    ax2.imshow(right_image) 
    ax2.set_title('Shape '+ str(right_image.shape) 
        , fontsize=50) 
    plt.show() 

В результате

enter image description here

Очевидно, что канал цвета был изменен д. Но почему? Есть ли ошибка в моем коде или это может быть ошибка keras?

+0

Как вы построили эти изображения? –

+0

Я отредактировал его в исходном вопросе – user1934212

+0

По какой-то причине matplotlib иногда принимает негатив изображения вместо исходного изображения. Не могли бы вы сравнить фактические значения на обеих картинках и проверить, отличаются ли они? –

ответ

0

Его не ошибка Keras. Тензоры обычно имеют тип float32, поэтому, когда результат оценивается, они также имеют тип float32. Перед отображением необходимо преобразовать данные изображения в uint8.

ax2.imshow(np.uint8(right_image)) 

в compare_images должно отображать изображение правильно.

 Смежные вопросы

  • Нет связанных вопросов^_^