mardi 28 février 2017

Why is Python randint() generating bizarre grid effect when used in script to transform image?

I am playing around with images and the random number generator in Python, and I would like to understand the strange output picture my script is generating.

The larger script iterates through each pixel (left to right, then next row down) and changes the color. I used the following function to offset the given input red, green, and blue values by a randomly determined integer between 0 and 150 (so this formula is invoked 3 times for R, G, and B in each iteration):

def colCh(cVal):
  random.seed()
  rnd = random.randint(0,150)
  newVal = max(min(cVal - 75 + rnd,255),0)
  return newVal

My understanding is that random.seed() without arguments uses the system clock as the seed value. Given that it is invoked prior to the calculation of each offset value, I would have expected a fairly random output.

When reviewing the numerical output, it does appear to be quite random:

Scatter plot of every 100th R value as x and R' as y

However, the picture this script generates has a very peculiar grid effect:

Output picture with grid effect hopefully noticeable

Furthermore, fwiw, this grid effect seems to appear or disappear at different zoom levels.

I will be experimenting with new methods of creating seed values, but I can't just let this go without trying to get an answer.

Can anybody explain why this is happening? THANKS!!!




Aucun commentaire:

Enregistrer un commentaire