I always found that Python was great for manipulating strings, or even lists, which is why it remains my language of choice, as opposed to R, for bioinformatics stuff. Needless to say, I hate significant indentation, but other than that I find the language pleasant, and as they said it comes battery included. There’s lot to learn from the base module.
Today, I was trying to make some graphic with Matplotlib and I happened to find some interesting side-effects that we can produce using
import matplotlib.pyplot as plt import numpy as np # Credit: https://www.publicdomainpictures.net/pictures/210000/velka/rose-grayscale.jpg img = plt.imread("rose-grayscale.jpg") idx = [[1,1,1], [1,0,0], [0,1,0], [0,0,1]] for i in range(4): plt.subplot(2, 2, i+1) plt.imshow(img*idx[i]) plt.axis('off')
Other manipulating RGB channels using simple matrix operations, we can also use more advanced techniques like adding blur or low-pass filter effects with OpenCV2. However, using Numpy alone we can also add some salt and pepper-like effect: (Credit: Shubham Pachori)
def noisy(noise_typ, image): if noise_typ == "gauss": row, col, ch = image.shape mean = 0 var = 0.1 sigma = var**0.5 gauss = np.random.normal(mean, sigma, (row, col, ch)) gauss = gauss.reshape(row, col, ch) noisy = image + gauss return noisy elif noise_typ == "s&p": row, col, ch = image.shape s_vs_p = 0.5 amount = 0.004 out = np.copy(image) num_salt = np.ceil(amount * image.size * s_vs_p) coords = [np.random.randint(0, i - 1, int(num_salt)) for i in image.shape] out[coords] = 1 num_pepper = np.ceil(amount * image.size * (1.0 - s_vs_p)) coords = [np.random.randint(0, i - 1, int(num_pepper)) for i in image.shape] out[coords] = 0 return out elif noise_typ == "poisson": vals = len(np.unique(image)) vals = 2 ** np.ceil(np.log2(vals)) noisy = np.random.poisson(image * vals) / float(vals) return noisy elif noise_typ == "speckle": row, col, ch = image.shape gauss = np.random.randn(row, col, ch) gauss = gauss.reshape(row, col, ch) noisy = image + image * gauss return noisy type = ["gauss", "s&p", "poisson", "speckle"] for i in range(4): plt.subplot(2, 2, i+1) plt.imshow(noisy(type[i], img/255)) plt.axis('off')
♪ Magazine • Back to Nature