python如何将图像随机分布,如何在python中随机化图像像素

I am new to computational vision and python and I could not really figure out what went wrong. I have tried to randomize all the image pixels in a RGB image, but my image turned out to be completely wrong as seen below. Can someone please shed some light?

from scipy import misc

import numpy as np

import matplotlib.pyplot as plt

#Loads an arbitrary RGB image from the misc library

rgbImg = misc.face()

%matplotlib inline

#Display out the original RGB image

plt.figure(1,figsize = (6, 4))

plt.imshow(rgbImg)

plt.show()

#Initialise a new array of zeros with the same shape as the selected RGB image

rdmImg = np.zeros((rgbImg.shape[0], rgbImg.shape[1], rgbImg.shape[2]))

#Convert 2D matrix of RGB image to 1D matrix

oneDImg = np.ravel(rgbImg)

#Randomly shuffle all image pixels

np.random.shuffle(oneDImg)

#Place shuffled pixel values into the new array

i = 0

for r in range (len(rgbImg)):

for c in range(len(rgbImg[0])):

for z in range (0,3):

rdmImg[r][c][z] = oneDImg[i]

i = i + 1

print rdmImg

plt.imshow(rdmImg)

plt.show()

original image

iBH34.png

image of my attempt in randomizing image pixel

fOqv5.png

解决方案

You are not shuffling the pixels, you are shuffling everything when you use np.ravel() and np.shuffle() afterwards.

When you shuffle the pixels, you have to make sure that the color, the RGB tuples, stay the same.

from scipy import misc

import numpy as np

import matplotlib.pyplot as plt

#Loads an arbitrary RGB image from the misc library

rgbImg = misc.face()

#Display out the original RGB image

plt.figure(1,figsize = (6, 4))

plt.imshow(rgbImg)

plt.show()

# doc on shuffle: multi-dimensional arrays are only shuffled along the first axis

# so let's make the image an array of (N,3) instead of (m,n,3)

rndImg2 = np.reshape(rgbImg, (rgbImg.shape[0] * rgbImg.shape[1], rgbImg.shape[2]))

# this like could also be written using -1 in the shape tuple

# this will calculate one dimension automatically

# rndImg2 = np.reshape(rgbImg, (-1, rgbImg.shape[2]))

#now shuffle

np.random.shuffle(rndImg2)

#and reshape to original shape

rdmImg = np.reshape(rndImg2, rgbImg.shape)

plt.imshow(rdmImg)

plt.show()

This is the random racoon, notice the colors. There is not red or blue there. Just the original ones, white, grey, green, black.

bAAk4.png

There are some other issues with your code I removed:

Do not use the nested for loops, slow.

The preallocation with np.zeros is not needed (if you ever need it, just pass rgbImg.shape as argument, no need to unpack the separate values)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值