我们可以在不增加尺寸的情况下将图像从64x64调整为256x256的大小吗 [英] Can we resize an image from 64x64 to 256x256 without increasing the size

查看:741
本文介绍了我们可以在不增加尺寸的情况下将图像从64x64调整为256x256的大小吗的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们可以在不增加尺寸的情况下将图像从64x64调整为256x256并影响分辨率吗?是一种在新调整大小的输出中在新行和列上添加零的方法,我正在vgg上工作,添加我时出现错误输入图片为64x64,因为vggface是经过训练的模型,其输入大小为224

Can we resize an image from 64x64 to 256x256 without increasing the size and affect the resolution is that a way to add zero on new row and column in the new resized output I m working on vgg and I get an error while adding my 64x64 input image because vggface is a pertrained model that include an input size of 224

代码:

from keras.models import Model, Sequential
from keras.layers import Input, Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dense, Dropout, Activation
from PIL import Image
import numpy as np
from keras.preprocessing.image import load_img, save_img, img_to_array
from keras.applications.imagenet_utils import preprocess_input
from keras.preprocessing import image
import matplotlib

matplotlib.use('TkAgg')

import matplotlib.pyplot as plt

# from sup5 import X_test, Y_test
from sklearn.metrics import roc_curve, auc


from keras.models import Model, Sequential
from keras.layers import Input, Convolution2D, ZeroPadding2D, MaxPooling2D, Flatten, Dense, Dropout, Activation
from PIL import Image
import numpy as np
from keras.preprocessing.image import load_img, save_img, img_to_array
from keras.applications.imagenet_utils import preprocess_input
from keras.preprocessing import image
import matplotlib.pyplot as plt

# from sup5 import X_test, Y_test
from sklearn.metrics import roc_curve, auc
from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np

model = VGG16(weights='imagenet', include_top=False)




from keras.models import model_from_json




vgg_face_descriptor = Model(inputs=model.layers[0].input
                            , outputs=model.layers[-2].output)
# import  pandas as pd
# test_x_predictions = deep.predict(X_test)
# mse = np.mean(np.power(X_test - test_x_predictions, 2), axis=1)
# error_df = pd.DataFrame({'Reconstruction_error': mse,
#                         'True_class': Y_test})
# error_df.describe()
from PIL import Image


def preprocess_image(image_path):
    img = load_img(image_path, target_size=(224, 224))

    img = img_to_array(img)
    img = np.expand_dims(img, axis=0)

    img = preprocess_input(img)
    return img


def findCosineSimilarity(source_representation, test_representation):
    a = np.matmul(np.transpose(source_representation), test_representation)
    b = np.sum(np.multiply(source_representation, source_representation))
    c = np.sum(np.multiply(test_representation, test_representation))
    return 1 - (a / (np.sqrt(b) * np.sqrt(c)))


def findEuclideanDistance(source_representation, test_representation):
    euclidean_distance = source_representation - test_representation
    euclidean_distance = np.sum(np.multiply(euclidean_distance, euclidean_distance))
    euclidean_distance = np.sqrt(euclidean_distance)
    return euclidean_distance


vgg_face_descriptor = Model(inputs=model.layers[0].input, outputs=model.layers[-2].output)

# for encod epsilon = 0.004
epsilon = 0.16
# epsilon = 0.095
retFalse,ret_val, euclidean_distance = verifyFace(str(i)+"test.jpg", str(j)+"train.jpg", epsilon)
  verifyFace1(str(i) + "testencod.jpg", str(j) + "trainencod.jpg")

错误: ValueError:操作数不能与一起广播 重新映射的形状[原始->重新映射]: (512,14,14)->(512,newaxis,newaxis)(14,14,512)->(14,newaxis,newaxis) 并要求形状(14,512)

Error : ValueError: operands could not be broadcast together with remapped shapes [original->remapped]: (512,14,14)->(512,newaxis,newaxis) (14,14,512)->(14,newaxis,newaxis) and requested shape (14,512)

推荐答案

我不确定您的意思,这是我为您提供的解决方案. 第一种方法,如果我清楚理解您的意思,则要添加零值的pad,则需要对图像的每一层使用numpy.pad.

I'm not sure what you mean, here is my solution for you. First method, if i understand clearly what you mean, for adding pad with zero value you need to use numpy.pad for each layer of image.

我以这张图片为例,其形状为158x84x3

I use this image for take example, its shape is 158x84x3

import numpy as np
import cv2
from matplotlib import pyplot as mlt
image = cv2.imread('zero.png')
shape = image.shape
add_x = int((256-shape[0])/2)
add_y = int((256-shape[1])/2)
temp_img = np.zeros((256,256,3),dtype = int)
for i in range(3):
    temp_img[:,:,i] = np.pad(image[:,:,i],((add_x,add_x),(add_y,add_y)),'constant', constant_values = (0))
mlt.imshow(temp_img)

通过此代码,我可以在图片中添加填充,并得到这样的结果.

By this code i can add padding into picture and have the result like this.

现在,您可以根据需要将其形状设为256x256x3. 或者,另一种适合您的方法是使用枕头影像库".通过使用它,您可以通过非常简单的代码来调整图片的大小而不会丢失太多信息.

Now its shape is 256x256x3 like you want. Or another method for you is use Image of Pillow library. By using that, you can resize the picture without losing too much information with very simple code.

from PIL import Image
image = Image.fromarray(image)
img = image.resize((256, 256), Image.BILINEAR) 
mlt.imshow(img)

该代码将为您提供此解决方案

That code will give you this solution

希望我的回答可以帮助您解决问题!

Hope my answer can help you solve the problem!

这篇关于我们可以在不增加尺寸的情况下将图像从64x64调整为256x256的大小吗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆