I am trying to get the following image to a certain grayscale value
I want the spiral to have a grayscale of 120 and everything else to have a grayscale value of 255. What can I do?
For this specific task and if you don't care about how the method can be extended to other cases, the following python code does the job:
import numpy as np
import matplotlib.pyplot as plt
import sys
if __name__ == "__main__":
img = plt.imread(sys.argv[1])
img = img.astype(int) # type conversion from uint8 to int
# given that the spiral structure mostly consists of pixel with 0 value
img += 120
img = np.clip(img, 0, 255).astype(np.uint8) # clip to valid image range and convert the int type img back to uint8
plt.imsave("grayscale-120.jpg", img)
Note that, the original image does not just contain pixel value of 255 and 0, there are intermediate values. The code above does not get rid of the intermediate values (though, it is negligible). But if you really want to get rid of them, you can use:
img[img > 120] = 255
as a thresholded pixel value substitution before saving the image. This will yield images will exactly two pixel values (120 and 255). But... your image is of jpeg format, so you will notice some compression artifacts and the noise that hardly noticable before is enhanced by hard thresholding. Yet, you can use opening operation to get rid of the artifacts, right before you save the image:
import cv2
kernel = np.ones((3, 3),np.uint8)
img = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
well... this is not perfect, but I am sure more tweaking can be done here.