我们可以在不增加尺寸的情况下将图像从64x64调整为256x256的大小吗 [英] Can we resize an image from 64x64 to 256x256 without increasing the size
问题描述
我们可以在不增加尺寸的情况下将图像从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屋!