Python Image Shuffle Failure - 我哪里出错了?

时间:2012-10-17 02:47:15

标签: python numpy python-imaging-library random-sample

我正在尝试对图像中的所有像素进行加扰,而我的Knuths shuffle(以及其他人的)的实现似乎失败了。似乎它正在做每行。我无法理解为什么 - 只是看不到它。

以下是发生的事情:

enter image description here enter image description here

哪个不是很拼凑!好吧,它可能更多的是刮削,需要更多的刮削。

这是我的代码:

import Image
from numpy import *

file1 = "lhooq"
file2 = "kandinsky"

def shuffle(ary):
    a=len(ary)
    b=a-1
    for d in range(b,0,-1):
      e=random.randint(0,d)
      ary[d],ary[e]=ary[e],ary[d]
    return ary

for filename in [file1, file2]:
    fid = open(filename+".jpg", 'r')
    im = Image.open(fid)

    data = array(im)

    # turn into array
    shape = data.shape
    data = data.reshape((shape[0]*shape[1],shape[2]))

    # Knuth Shuffle
    data = shuffle(data)

    data = data.reshape(shape)
    imout = Image.fromarray(data)

    imout.show()

    fid.close()

1 个答案:

答案 0 :(得分:1)

ary是2D数组时,ary[d]是该数组的视图,而不是内容的副本。

因此,ary[d],ary[e]=ary[e],ary[d]等同于作业ary[d] = ary[e]; ary[e] = ary[e],因为RHS上的ary[d]只是指向d的{​​{1}}元素的指针(而不是像素值的副本。)

要解决此问题,您可以使用高级索引

ary