Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.04 KB | None | 0 0
  1. import cv2
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. import matplotlib.image as img
  5. import glob
  6. import skimage
  7. import skimage.feature as skifeat
  8. import skimage.morphology as skimorp
  9. import skimage.color as skicol
  10. import skimage.io as simg
  11. import skimage.exposure as sexp
  12. import skimage.filters as skifil
  13.  
  14. def printNoise(origin,filter,name):
  15.     plt.subplot(122); plt.axis("off"); plt.title(name)
  16.     plt.imshow(filter, cmap="gray")
  17.     plt.subplot(121); plt.axis("off"); plt.title("Origin")
  18.     plt.imshow(origin, cmap="gray")
  19.     plt.show()
  20.  
  21. def add_noise(noise_typ,image):
  22.    if noise_typ == "gauss":
  23.       mean = 0
  24.       sigma = 0.1
  25.       gauss = np.random.normal(mean,sigma,image.shape)
  26.       noisy = image + gauss
  27.       return noisy
  28.    elif noise_typ == "uniform":
  29.       low = 0
  30.       high = 1
  31.       uniform = np.random.uniform(low,high,image.shape)
  32.       noisy = image + uniform
  33.       return noisy
  34.    elif noise_typ == "s&p":
  35.       #row,col,ch = image.shape
  36.       s_vs_p = 0.5
  37.       amount = 0.02
  38.       res = np.copy(image)
  39.       # Salt mode
  40.       num_salt = np.ceil(amount * image.size * s_vs_p)
  41.       coords = [np.random.randint(0, i - 1, int(num_salt))    for i in image.shape]
  42.       res[coords] = 1
  43.  
  44.       # Pepper mode
  45.       num_pepper = np.ceil(amount* image.size * (1. - s_vs_p))
  46.       coords = [np.random.randint(0, i - 1, int(num_pepper))    for i in image.shape]
  47.       res[coords] = 0
  48.       return res
  49.    elif noise_typ == "poisson":
  50.        lam = 0.1
  51.        poisson = np.random.poisson(lam,image.shape)
  52.        noisy = poisson + image
  53.        return noisy
  54.    elif noise_typ =="speckle":
  55.       row,col = image.shape
  56.       gauss = np.random.randn(row,col)*0.2      
  57.       noisy = gauss*image + image
  58.       return noisy
  59. def exOne():
  60.     img = plt.imread("images\\coins.png")
  61.     noise = add_noise("uniform",img)
  62.     printNoise(img,noise,"uniform")
  63.  
  64. def lowpass_filter(noise_typ,image,sigma=1.0,radius=2,ksize=3,s_0=80,s_1=120):
  65.       if noise_typ == "gauss":
  66.           gray = skicol.rgb2gray(image)
  67.           filter = skifil.gaussian(gray,sigma)
  68.           return filter
  69.       elif noise_typ == "mean":
  70.           gray = skicol.rgb2gray(image)
  71.           filter = skimage.filters.rank.mean(gray, skimorp.disk(radius))
  72.           return filter
  73.       elif noise_typ == "median": #for s&p
  74.           gray = skicol.rgb2gray(image)
  75.           kernel = np.ones((ksize,ksize),dtype=np.uint8)
  76.           filter = skifil.median(gray, kernel)
  77.           return filter
  78.       elif noise_typ == "meanBilateral": #for speckle
  79.           gray = skicol.rgb2gray(image)
  80.           filter = skimage.filters.rank.mean_bilateral(gray, skimorp.disk(radius), s0=s_0, s1=s_1)
  81.           return image - gray
  82. def exTwo():
  83.     img = plt.imread("images\\gaussianNoise.png")
  84.     param = {"sigma":1.0,  "radius":2,  "ksize":3,  "s_0":80,  "s_1":120}
  85.     mode = "mean"
  86.     filter = lowpass_filter(mode,img,radius=param["radius"])
  87.     printNoise(img,filter,mode)
  88.  
  89. def exThree():
  90.     img1 = plt.imread("images\\coins.png")
  91.     img2 = plt.imread("images\\cameraman.bmp")
  92.     img3 = plt.imread("images\\horse.png")
  93.     gaussian = add_noise("gauss",img1)
  94.     snp = add_noise("s&p", img2)
  95.     uniform = add_noise("uniform", img3)
  96.  
  97.     filterForGauss = lowpass_filter("gauss",gaussian)
  98.     filterForSnp = lowpass_filter("median",snp)
  99.     filterForUniform = lowpass_filter("gauss",uniform)
  100.  
  101.     printNoise(img1,gaussian,"gaussian")
  102.     printNoise(gaussian,filterForGauss,"For gaussian")
  103.  
  104.     printNoise(img2,snp,"snp")
  105.     printNoise(snp,filterForSnp,"For snp")
  106.  
  107.     printNoise(img3,uniform,"uniform")
  108.     printNoise(uniform,filterForUniform,"For uniform")
  109.  
  110.     img4 = plt.imread("images\\lena.png")
  111.     poisson = add_noise("poisson", img4)
  112.     printNoise(img4,poisson,"poisson")
  113.     filterForPoisson = poisson.copy()
  114.     kernel = np.ones((3,3),dtype=np.uint8)
  115.     filterForPoisson[:,:,0] = skifil.median(poisson[:,:,0], kernel)
  116.     filterForPoisson[:,:,1] = skifil.median(poisson[:,:,1], kernel)
  117.     filterForPoisson[:,:,2] = skifil.median(poisson[:,:,2], kernel)
  118.     printNoise(poisson,filterForPoisson,"For poisson")
  119.  
  120. def highpass_filter(noisy_typ,image,kSize=5,Mask=None,Sigma=2,low_thresh=0.1,high_thresh=0.2):
  121.     if noisy_typ == "roberts":
  122.         gray = gray = skicol.rgb2gray(image)
  123.         filter = skimage.filters.roberts(gray,mask=Mask)
  124.         return filter
  125.     elif noisy_typ == "sobel":
  126.         gray = gray = skicol.rgb2gray(image)
  127.         filter = skimage.filters.sobel(gray,mask=Mask)
  128.         return filter
  129.     elif noisy_typ == "scharr":
  130.         gray = gray = skicol.rgb2gray(image)
  131.         filter = skimage.filters.scharr(gray,mask=Mask)
  132.         return filter
  133.     elif noisy_typ == "prewitt":
  134.         gray = gray = skicol.rgb2gray(image)
  135.         filter = skimage.filters.prewitt(gray,mask=Mask)
  136.         return filter
  137.     elif noisy_typ == "laplace":
  138.         gray = gray = skicol.rgb2gray(image)
  139.         filter = skimage.filters.laplace(gray,ksize=kSize)
  140.         return filter
  141.     elif noisy_typ == "canny":
  142.         gray = gray = skicol.rgb2gray(image)
  143.         filter = skifeat.canny(gray ,sigma=Sigma   ,low_threshold=low_thresh     ,high_threshold=high_thresh)
  144.         return filter
  145. def allFilters():
  146.     img = plt.imread("images\\coins.png")
  147.     #mask = np.ones((246,300),dtype=np.uint8)
  148.  
  149.     roberts = highpass_filter("roberts",img)
  150.     sobel = highpass_filter("sobel",img)
  151.     scharr = highpass_filter("scharr",img)
  152.     prewitt = highpass_filter("prewitt",img)
  153.     laplace = highpass_filter("laplace",img,kSize=3)
  154.     canny = highpass_filter("canny",img,Sigma=2,low_thresh=0.1,high_thresh=0.2)
  155.  
  156.     names = ["roberts","sobel","scharr","prewitt","laplace","canny"]
  157.     filters = [roberts,sobel,scharr,prewitt,laplace,canny]
  158.     for i in range(6):
  159.         plt.subplot(230+i+1); plt.axis("off"); plt.title(names[i])
  160.         plt.imshow(filters[i], cmap="gray")
  161.     plt.show()
  162. def exFour():
  163.     img = plt.imread("images\\coins.png")
  164.     filter = highpass_filter("canny",img)
  165.     #printNoise(img,filter,"canny")
  166.     allFilters()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement