opencv进阶学习笔记5:图像模糊操作,图像锐化,边缘保留滤波EPF(图像滤镜)
基礎版傳送門:
 python3+opencv學習筆記匯總目錄(適合基礎入門學習)
 進階版筆記目錄鏈接:
 python+opencv進階版學習筆記目錄(適合有一定基礎)
模糊操作
方法:均值模糊,中值模糊,自定義模糊
 模糊原理:
 基于離散卷積,不同的卷積得到不同的卷積效果,模糊是卷積的表象。
基礎講解鏈接
 opencv學習筆記11:圖像濾波(均值,方框,高斯,中值)
卷積原理示意圖:
 (2乘1+3乘以1+6乘以1)除以3=3
 邊緣2和1未被卷積保留
 邊緣不參與卷積直接保留。
 
均值模糊
import cv2 as cv import numpy as npdef blur_demo(image):#均值濾波模糊dst = cv.blur(image, (5, 5))cv.imshow("blur_demo", dst) print("--------- Hello Python ---------") src = cv.imread("yangmi.jpg") src=cv.resize(src,None,fx=0.4,fy=0.4) cv.namedWindow("input image", cv.WINDOW_AUTOSIZE) cv.imshow("input image", src) blur_demo(src) cv.waitKey(0) cv.destroyAllWindows()(5,5)為卷積核,可以修改。
 圖片來源于網絡。
 
中值模糊
import cv2 as cv def median_blur_demo(image):dst = cv.medianBlur(image, 5)cv.imshow("median_blur_demo", dst)高斯模糊
numpy 實現高斯模糊
import cv2 as cv import numpy as np#截斷函數 def clamp(pv):if pv > 255:return 255if pv < 0:return 0else:return pv #高斯濾波 def gaussian_noise(image):h, w, c = image.shapefor row in range(h):for col in range(w):s = np.random.normal(0, 20, 3)#生成隨機數b = image[row, col, 0] # blueg = image[row, col, 1] # greenr = image[row, col, 2] # redimage[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)print("--------- Hello Python ---------") src = cv.imread("yangmi.jpg") src=cv.resize(src,None,fx=0.5,fy=0.5) cv.imshow("input image", src) gaussian_noise(src) cv.waitKey(0) cv.destroyAllWindows()numpy實現時間較慢,大約4,5秒。
 
opencv實現高斯模糊
 實現方法:GaussianBlur
 處理結果=cv2.GaussianBlur(原始圖像src,核函數大小ksize,sigmaX)
核函數大小ksize:(N,N)必須是奇數
 sigmaX:控制x方向方差,控制權重,一般取0,它自己去計算方差。y軸方差和x一致
 
dst = cv.GaussianBlur(src, (0, 0), 7)時
import cv2 as cvprint("--------- Hello Python ---------") src = cv.imread("yangmi.jpg") src=cv.resize(src,None,fx=0.5,fy=0.5) cv.imshow("input image", src) dst = cv.GaussianBlur(src, (0, 0), 7) cv.imshow("Gaussian Blur", dst) cv.waitKey(0) cv.destroyAllWindows()自定義模糊和圖像銳化
dst=cv.filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])
 src: 原圖像
 dst :目標圖像,與原圖像尺寸和通過數相同
 ddepth: 目標圖像的所需深度,-1與原圖一樣
 kernel 卷積核(或相當于相關核),單通道浮點矩陣;如果要將不同的內核應用于不同的通道,請使用拆分將圖像拆分為單獨的顏色平面,然后單獨處理它們。
 anchor 內核的錨點,指示內核中過濾點的相對位置;錨應位于內核中;默認值(-1,-1)表示錨位于內核中心。
 detal 在將它們存儲在dst中之前,將可選值添加到已過濾的像素中。類似于偏置。
 borderType 像素外推法,參見BorderTypes
使用不同的卷積核有不同的效果。
 kernel = np.ones([5, 5], np.float32)/25:模糊
kernel = np.array([[0, -1, 0],[-1, 5, -1],[0, -1, 0]], np.float32):銳化算子,各個數字加起來總和等于0或者1,各個數字為奇數??偤蜑?做的是邊緣;
邊緣保留濾波EPF
之前介紹了無論是均值還是高斯都是屬于模糊卷積,它們都有一個共同的特點就是模糊之后圖像的邊緣信息不復存在,受到了破壞。有一種濾波方法有能力通過卷積處理實現圖像模糊的同時對圖像邊緣不會造成破壞,濾波之后的輸出完整的保存了圖像整體邊緣(輪廓)信息,這類卷積濾波算法被稱為邊緣保留濾波算法(EPF)。
 實現方法:高斯雙邊,均值遷移
 使用場景:做圖像濾鏡。
 
 大白話講解原理:首先對左邊(黑白色圖)進行高斯濾波,
 高斯濾波為下圖,取值范圍可以叫做空域
 
 如何當前點與周圍像素值差異較大如下圖,范圍可以叫為值域
 
則進行截斷。得到
 
 最后得到右圖(黑巴色)。
 高斯濾波參人為添加,像素差多少截斷人為設計。
高斯 雙邊模糊原理
 高斯濾波(空間臨近)是將二維高斯正態分布放在圖像矩陣上做卷積運算??紤]的是鄰域內像素值的空間距離關系。通過在核大小范圍內,各個點到中心點的空間臨近度計算出對應的權值,并將計算好的核與圖像矩陣作卷積。最后,圖像經過濾波后達到平滑的效果,而圖像上的邊緣也會有一定程度的平滑,使得整個圖像變得模糊,邊緣得不到保存。
 雙邊濾波基本思想:將高斯濾波(空間臨近)中通過各個點到中心點的空間臨近度計算的各個權值進行優化,將其優化為空間臨近度計算的權值 和 像素值相似度計算的權值的乘積,優化后的權值再與圖像作卷積運算。從而達到保邊去噪的效果。
高斯雙邊模糊
 dst=cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]])
 src:輸入圖像
 d:過濾時周圍每個像素領域的直徑
 sigmaColor:在color space中過濾sigma。參數越大,臨近像素將會在越遠的地方mix。
 sigmaSpace:在coordinate space中過濾sigma。參數越大,那些顏色足夠相近的的顏色的影響越大。
 值域和空域的兩個方差sigma可以簡單的設置為相等,小于10,無太大效果,大于150效果太強,像卡通片似的。
 講解
 濾波器尺寸d:大于5將較慢(5 forreal-time)d 是像素鄰域“直徑”。
 Sigma_color較大,則在鄰域中的像素值相差較大的像素點也會用來平均。
 Sigma_space較大,則雖然離得較遠,但是,只要值相近,就會互相影響。
 將sigma_sapce設置較大,sigma_color設置較小,可獲得較好的效果(椒鹽噪聲)。
 雙邊濾波的內在想法是:在圖像的值域(range)上做傳統濾波器在空域(domain)上做的工作。空域濾波對空間上鄰近的點進行加權平均,加權系數隨著距離的增加而減少;值域濾波則是對像素值相近的點進行加權平均,加權系數隨著值差的增大而減少。同時考慮對空間域與值域進行濾波的意義:將對圖像進行平滑化的范圍限制在值域較小的部分(也就是 光度/色彩差異較小的部分),如此便能夠達到邊緣保存的目的。(文字部分有借鑒別人的)
可以看到眼睛與周圍像素相差很大(屬于邊界)被保留啦下來。
 
 均值偏移
 meanShfit均值漂移算法是一種通用的聚類算法,它的基本原理是:對于給定的一定數量樣本,任選其中一個樣本,以該樣本為中心點劃定一個圓形區域,求取該圓形區域內樣本的質心,即密度最大處的點,再以該點為中心繼續執行上述迭代過程,直至最終收斂。
 dst = cv2.pyrMeanShiftFiltering(image, sp, sr,maxLevel,termcrit)
 sp:漂移物理空間半徑大小;
 sr:漂移色彩空間半徑大小;
 maxLevel:定義金字塔的最大層數
 termcrit:漂移迭代終止條件,可以設置為迭代次數滿足終止,迭代目標與中心點偏差滿足終止,或者兩者的結合
步驟:
以輸入圖像上src上任一點P0為圓心,建立物理空間上半徑為sp,色彩空間上半徑為sr的球形空間,物理空間上坐標2個—x、y,色彩空間上坐標3個—R、G、B(或HSV),構成一個5維的空間球體。
其中物理空間的范圍x和y是圖像的長和寬,色彩空間的范圍R、G、B分別是0~255。
在1中構建的球形空間中,求得所有點相對于中心點的色彩向量之和后,移動迭代空間的中心點到該向量的終點,并再次計算該球形空間中所有點的向量之和,如此迭代,直到在最后一個空間球體中所求得的向量和的終點就是該空間球體的中心點Pn,迭代結束。
原理文字部分有借鑒他人。
電氣專業的計算機萌新。寫博文不容易。如果你覺得本文對你有用,請點個贊支持下。謝謝。
總結
以上是生活随笔為你收集整理的opencv进阶学习笔记5:图像模糊操作,图像锐化,边缘保留滤波EPF(图像滤镜)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 仪表台和仪表盘一样吗?
- 下一篇: opencv进阶学习笔记6:使用鼠标在图
