[python-opencv] 模糊操作


@不要在奮斗的年紀 選擇安逸

均值模糊

  • 中值模糊
  • 自定義模糊
  • 意義與應用場景

模糊的基本原理:

1、基於離散卷積

2、定義好每個卷積核

3、不同卷積核得到不同的卷積效果

4、模糊是卷積的一種表象

 

 

 

 

 

#均值模糊 (2,8)高模糊2 寬模糊8
def blur_demo(image):
    dst = cv.blur(image,(2,8))
    cv.imshow('blur_demo',dst)

#中值模糊 適合椒鹽噪聲去噪
def median_blur_demo(image):
    dst = cv.medianBlur(image,5)
    cv.imshow('median_blur_demo',dst)

#自定義模糊
def customer_blur_demo(image):
    #定義卷積核---均值模糊的效果
    # kernel = np.ones([5,5],np.float32/25)
    # 定義卷積核---銳化
    kernel = np.array([[0,-1,0],[-1,5,-1],[0,-1,0]],np.float32)
dst
= cv.filter2D(image,-1,kernel=kernel) cv.imshow('customer_blur_demo',dst)

 高斯噪點

高斯分布的概率密度函數

numpy.random.normal(loc=0.0, scale=1.0, size=None)

參數的意義為:

loc:float

概率分布的均值,對應着整個分布的中心center

scale:float

概率分布的標准差,對應於分布的寬度,scale越大越矮胖,scale越小,越瘦高

size:int or tuple of ints

輸出的shape,默認為None,只輸出一個值,可以指定輸出值個數返回列表

我們更經常會用到np.random.randn(size)所謂標准正太分布(μ=0, σ=1),對應於np.random.normal(loc=0, scale=1, size)

n = np.random.normal(0,8,4)
print(n)
##[ -5.65830268   4.27277753   2.97616802  -15.1577604 ]

 

#定義高斯噪聲
def gaussian_noise(image):
    h,w,ch = image.shape
    for row in range(h):
        for col in range(w):
            s = np.random.normal(0,20,3)   #均值為0 方差為20 輸出3個值
            b = image[row,col,0]    #blue
            g = image[row,col,1]    #green
            r = image[row,col,2]    #red
            # 給blue層加上正態分布噪點
            image[row,col,0] = clamp(b + s[0])
            image[row,col,1] = clamp(g + s[1])
            image[row,col,2] = clamp(r + s[2])
    cv.imshow('noise image',image)

 

 

"""高斯模糊:這里(5, 5)表示高斯矩陣的長與寬都是5 標准差取6,當取尺寸(5,5)時標准差失效、當取尺寸(0,0)時標准差有效。並且高斯矩陣的尺寸越大或者標准差越大,處理過的圖像模糊程度越大"""
dst = cv.GaussianBlur(src,(5,5),6)
cv.imshow('Gaussian Blur1',dst)
dst = cv.GaussianBlur(src,(0,0),10)
cv.imshow('Gaussian Blur2',dst)

 

EPF(Edge Preserver Filter)邊緣保留濾波

高斯模糊只考慮了權重,只考慮了像素空間的分布,沒有考慮像素值和另一個像素值之間差異的問題,如果像素間差異較大的情況下(比如圖像的邊緣),高斯模糊會進行處理,但是我們不需要處理邊緣,要進行的操作就叫做邊緣保留濾波(EPF)

知識點:邊緣輪廓差異較大的時候得到保留、

案例:

 

"""
#EPF-高斯雙邊濾波
其中各參數所表達的意義:
    src:原圖像;
    d:像素的鄰域直徑,可有sigmaColor和sigmaSpace計算可得;
    sigmaColor:顏色空間的標准方差,一般盡可能大;
    sigmaSpace:坐標空間的標准方差(像素單位),一般盡可能小。
"""
def bi_demo(image):
    dst = cv.bilateralFilter(image,0,150,10)
    cv.imshow('bilateralFilter',dst)


"""
#EPF-均值偏移濾波
其中各參數所表達的意義:
    src:原圖像;
    sp:空間窗的半徑(The spatial window radius);
    sr:色彩窗的半徑(The color window radius);
注意: 通過均值遷移來進行邊緣保留濾波有時會導致圖像過度模糊
"""
def shift_demo(image):
    dst = cv.pyrMeanShiftFiltering(image,10,50)
    cv.imshow('pyrMeanShiftFiltering',dst)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM