gpt4 book ai didi

python - 平铺图像需要很长时间

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:38 25 4
gpt4 key购买 nike

我有以下代码,基本上获取图像并将其放在像素上,换句话说,获取图像的每个像素并创建一个 10x10“像素”,其中包括它们之间的空白,如下所示:

enter image description here

这变得非常慢,我想知道这是正常现象还是我在做一些多余的操作?

import numpy as np
from scipy.misc import lena
import matplotlib.pyplot as plt

def rect(x, y):

res = (np.abs(x) < .5)*(np.abs(y) < .5)
return res

def placeOnSLM(FF, image):

step = .1
x, y = np.mgrid[0:image.shape[0]+step:step, 0:image.shape[1]+step:step]
outImage = np.zeros(x.shape)+np.min(image)
for ix in range(image.shape[0]):
print ix,'of',image.shape[0]
for iy in range(image.shape[1]):
outImage[(np.abs(x-ix-.5)/FF < .5) * (np.abs(y-iy-.5)/FF < .5)] = image[ix, iy]
# outImage += image[ix, iy]*rect((x-ix-.5)/FF, (y-iy-.5)/FF)
return outImage

if __name__ == '__main__':

num = 10
image = placeOnSLM(.9, lena()[:num,:num])
plt.imshow(lena()[:num,:num],'gray', interpolation='none')
plt.colorbar()
plt.figure()
plt.imshow(image,'gray',interpolation='none')
plt.colorbar()
plt.show()

编辑:

我使用的操作系统是 Ubuntu 13.10

最佳答案

不使用 for 循环的解决方案怎么样?不确定,因为我没有太多使用 matplotlib,但我认为它与 matlab 类似,所以我会用 matlab 编写,希望将它转换为 matplotlib 是微不足道的。

解决方案很简单:使用 matlabs imresize 函数调整图像大小,但将插值设置为“最近”而不是双线性/双三次插值。如果将图像放大 10 倍,它基本上会生成 10x10 block ,其值等于原始图像的一个像素。以下代码执行此操作,然后添加边距。 (for循环只是为了测试n的各种值)。

ns= [10:10:100, 500, 1000];
times= zeros(size(ns));

for i= 1:length(ns)

n= ns(i);
s= 10; % 10x10 pixels in the result = 1x1 of the original image
margin= 2;

% create the image
im= rand(n,n);

tic
% resize the image
im2= imresize(im, (s+margin)*size(im), 'nearest');

% add margins
[x,y]= meshgrid([0:n]*(s+margin), [1:margin]);
inds= x(:)+y(:);
im2(inds,:)=0; im2(:, inds)=0;

times(i)= toc;
% imagesc(im2); pause; % visualize

end

plot(ns, times);

在我的测试中,当 n=1000 时,图像在 0.96 秒内创建(尽管我有一个四核 i5 @ 3.3 GHz。操作系统:Ubuntu 11.10。

关于python - 平铺图像需要很长时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23378345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com