2013年2月15日星期五

opencv&python - filter


 1.bilateral filter 

 Bilateral filter is a simple, non-iterative scheme for edge-preserving smoothing.

Python: cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]]) → dst
  • Sigma values: For simplicity, you can set the 2 sigma values to be the same. If they are small (< 10), the filter will not have much effect, whereas if they are large (> 150), they will have a very strong effect, making the image look “cartoonish”.
  •  Filter size: Large filters (d > 5) are very slow, so it is recommended to use d=5 for real-time applications, and perhaps d=9 for offline applications that need heavy noise filtering.
01 from cv2 import *
02 
03 im_kitten_orig = imread("kitten-orig.jpg")
04 im_face_orig = imread("face-orig.jpg")
05 
06 im_kitten_bilfilter = bilateralFilter(im_kitten_orig, 7, 100, 100)
07 im_face_bilfilter = bilateralFilter(im_face_orig, 7, 100, 100)
08 
09 imwrite("face-bilfilter.jpg", im_face_bilfilter)
10 imwrite("kitten-bilfilter.jpg", im_kitten_bilfilter)
11 
12 namedWindow("kitten-orig", 1)
13 namedWindow("kitten-bilfilter", 1)
14 imshow("kitten-orig", im_kitten_orig)
15 imshow("kitten-bilfilter", im_kitten_bilfilter)
16 
17 namedWindow("face-orig", 1)
18 namedWindow("face-bilfilter", 1)
19 imshow("face-orig", im_face_orig)
20 imshow("face-bilfilter", im_face_bilfilter)
21 waitKey()
kitten-orig

kitten-bilfilter

face-orig

face-bilfilter

2.blur

Blurs an image using the normalized box filter
Python: cv2.blur(src, ksize[, dst[, anchor[, borderType]]]) → dst
  • ksize: blurring kernal size (tuple)
01 from cv2 import *
02 
03 im_face_orig = imread("face-orig.jpg")
04 im_face_blur = blur(im_face_orig, (5, 5))
05 imwrite("face-blur.jpg", im_face_blur)
06 
07 namedWindow("face-orig", 1)
08 imshow("face-orig", im_face_orig)
09 namedWindow("face-blur", 1)
10 imshow("face-blur", im_face_blur)
11 waitKey()


face-blur

3.Gaussian blur

Blurs an image using a Gaussian filter.
Python: cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) → dst
01 from cv2 import *
02 
03 im_face_orig = imread("face-orig.jpg")
04 im_face_gaussblur = GaussianBlur(im_face_orig, (5, 5), 10)
05 imwrite("face-gaussblur.jpg", im_face_gaussblur)
06 
07 namedWindow("face-orig", 1)
08 imshow("face-orig", im_face_orig)
09 namedWindow("face-gaussblur", 1)
10 imshow("face-gaussblur", im_face_gaussblur)
11 waitKey()


face-gaussblur

 4.Median filter

Blurs an image using the median filter.
Python: cv2.medianBlur(src, ksize[, dst]) → dst
  • ksize: 3, 5, 7, ...
01 import random
02 from cv2 import *
03 
04 def addnoise(src, rate):
05     '''add salt and pepper noise'''
06     h, w, c = src.shape
07     for i in range(h):
08         for j in range(w):
09             r = random.randint(1, 200)
10             if r <= 100*rate:
11                 src[i][j] = [0, 0, 0]
12             if 100*rate < r <= 200*rate:
13                 src[i][j] = [255, 255, 255]
14     return src
15 
16 # add salt and pepper noise
17 im_face_orig = imread("face-orig.jpg")
18 im_face_noise = addnoise(im_face_orig, 0.2)
19 imwrite("face-noise.jpg", im_face_noise)
20 
21 # median filter
22 im_face_medfilter = medianBlur(im_face_noise, 5)
23 imwrite("face-medfilter.jpg", im_face_medfilter)
24 
25 # show image
26 namedWindow("face-noise", 1)
27 imshow("face-noise", im_face_noise)
28 namedWindow("face-medblur", 1)
29 imshow("face-medblur", im_face_medfilter)
30 waitKey()
face-noise
face-medfilter

   5.smoothing.py in opencv Official_Tutorial_Python

01 import cv2
02 import numpy as np
03 
04 DELAY_CAPTION = 1500;
05 DELAY_BLUR = 500;
06 
07 img = cv2.imread('lena.jpg')
08 
09 # blur
10 for i in xrange(1,31,2):
11     blur = cv2.blur(img,(i,i))
12     string = 'blur : kernel size - '+str(i)
13     cv2.putText(blur,string,(20,20),cv2.FONT_HERSHEY_COMPLEX_SMALL,1,(255,255,255))
14     cv2.imshow('Blur',blur)
15     cv2.waitKey(DELAY_BLUR)
16 
17 cv2.waitKey(DELAY_CAPTION)
18 
19 # GaussianBlur
20 for i in xrange(1,31,2):
21     gaussian_blur = cv2.GaussianBlur(img,(i,i),0)
22     string = 'guassian_blur : kernel size - '+str(i)
23     cv2.putText(gaussian_blur,string,(20,20),cv2.FONT_HERSHEY_COMPLEX_SMALL,1,(255,255,255))
24     cv2.imshow('Blur',gaussian_blur)
25     cv2.waitKey(DELAY_BLUR)
26 
27 cv2.waitKey(DELAY_CAPTION)
28 
29 # medianBlur
30 for i in xrange(1,31,2):
31     median_blur = cv2.medianBlur(img,i)
32     string = 'median_blur : kernel size - '+str(i)
33     cv2.putText(median_blur,string,(20,20),cv2.FONT_HERSHEY_COMPLEX_SMALL,1,(255,255,255))
34     cv2.imshow('Blur',median_blur)
35     cv2.waitKey(DELAY_BLUR)
36 
37 cv2.waitKey(DELAY_CAPTION)
38 
39 # bilateralFilter
40 for i in xrange(1,31,2):       # Remember, bilateral is a bit slow, so as value go higher, it takes long time
41     bilateral_blur = cv2.bilateralFilter(img,i, i*2,i/2)
42     string = 'bilateral_blur : kernel size - '+str(i)
43     cv2.putText(bilateral_blur,string,(20,20),cv2.FONT_HERSHEY_COMPLEX_SMALL,1,(255,255,255))
44     cv2.imshow('Blur',bilateral_blur)
45     cv2.waitKey(DELAY_BLUR)
46 
47 cv2.waitKey(DELAY_CAPTION)
48 
49 cv2.destroyAllWindows()

没有评论:

发表评论