真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python均值濾波函數(shù) 均值濾波器函數(shù)

OpenCV-Python系列六:圖像濾波

圖像濾波是一種十分常見的圖像處理手段。通常,你可以認(rèn)為相鄰位置像素是緊密聯(lián)系的,它們共同來顯示對(duì)某個(gè)物體,圖像濾波則通過運(yùn)算來排除圖像中和周圍相差大的像素。當(dāng)然,這并不是絕對(duì)的, 有時(shí)候你為了評(píng)估圖像的質(zhì)量,也會(huì)將這些“特立獨(dú)行”的像素作為選取的目標(biāo) 。無論你采用什么方法,記住你要的目標(biāo)就行,有時(shí)候你的目標(biāo)可能是別人的背景。

成都創(chuàng)新互聯(lián)從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元封丘做網(wǎng)站,已為上家服務(wù),為封丘各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18980820575

濾波常常會(huì)使得圖像變得模糊(非絕對(duì)),那么,為什么你需要將一幅清晰的圖像變得模糊呢?下面的例子應(yīng)該可以解釋。

高斯濾波采用滿足正態(tài)分布的核模板,其參數(shù)的主要參數(shù)是標(biāo)準(zhǔn)差σ,代表核的離散程度,σ值越小,模板中心系數(shù)與邊緣系數(shù)差越大,平滑的程度越小。

高斯濾波對(duì)圖像采集過程中由于不良照明/高溫引起的傳感器噪聲信號(hào)有較好的效果,消除了圖像中的高頻信號(hào)。

由于得到的是一維的Gaussian Kernel,你可以采用下面的方式轉(zhuǎn)為二維的

為了便于直觀感受高斯濾波的效果,使用Canny算子來提取輪廓對(duì)比,你可以試試在特征提取前加高斯濾波對(duì)比。

補(bǔ)充說明:對(duì)于均值濾波,你也可以使用cv2.boxFilter(src, ddepth, ksize[, dst[, anchor[, normalize[, borderType]]]])來實(shí)現(xiàn),需要將normalize設(shè)置為True,當(dāng)設(shè)置normalize為False時(shí),實(shí)現(xiàn)的是將kernel內(nèi)像素相加,官方文檔做出的描述為:

中值濾波對(duì)圖像中的脈沖型(椒鹽等)噪聲信號(hào)處理效果好,當(dāng) 你的應(yīng)用場景存在這種顆粒感的噪聲信號(hào)時(shí),中值濾波會(huì)是一種很好的選擇 。它,選取kernel區(qū)域內(nèi)像素點(diǎn)集的中值最為錨點(diǎn)的像素值,對(duì)類似投票機(jī)制中的最高分(高灰階點(diǎn))和最低分(過低灰階點(diǎn))影響有很好的抑制作用。

如果你的應(yīng)用涉及到圖像美化,雙邊濾波可以初步達(dá)到你的期望,關(guān)于雙邊濾波,這里不做展開,由你來探索,其函數(shù)參數(shù)信息如下。

對(duì)于opencv-python的圖像濾波部分有問題歡迎留言, Have Fun With OpenCV-Python, 下期見。

數(shù)字圖像處理Python實(shí)現(xiàn)圖像灰度變換、直方圖均衡、均值濾波

import CV2

import copy

import numpy as np

import random

使用的是pycharm

因?yàn)樽罱戳恕躲y翼殺手2049》,里面Joi實(shí)在是太好看了所以原圖像就用Joi了

要求是灰度圖像,所以第一步先把圖像轉(zhuǎn)化成灰度圖像

# 讀入原始圖像

img = CV2.imread('joi.jpg')

# 灰度化處理

gray = CV2.cvtColor(img, CV2.COLOR_BGR2GRAY)

CV2.imwrite('img.png', gray)

第一個(gè)任務(wù)是利用分段函數(shù)增強(qiáng)灰度對(duì)比,我自己隨便寫了個(gè)函數(shù)大致是這樣的

def chng(a):

if a 255/3:

b = a/2

elif a 255/3*2:

b = (a-255/3)*2 + 255/6

else:

b = (a-255/3*2)/2 + 255/6 +255/3*2

return b

rows = img.shape[0]

cols = img.shape[1]

cover = copy.deepcopy(gray)

for i in range(rows):

for j in range(cols):

cover[i][j] = chng(cover[i][j])

CV2.imwrite('cover.png', cover)

下一步是直方圖均衡化

# histogram equalization

def hist_equal(img, z_max=255):

H, W = img.shape

# S is the total of pixels

S = H * W * 1.

out = img.copy()

sum_h = 0.

for i in range(1, 255):

ind = np.where(img == i)

sum_h += len(img[ind])

z_prime = z_max / S * sum_h

out[ind] = z_prime

out = out.astype(np.uint8)

return out

covereq = hist_equal(cover)

CV2.imwrite('covereq.png', covereq)

在實(shí)現(xiàn)濾波之前先添加高斯噪聲和椒鹽噪聲(代碼來源于網(wǎng)絡(luò))

不知道這個(gè)椒鹽噪聲的名字是誰起的感覺隔壁小孩都饞哭了

用到了random.gauss()

percentage是噪聲占比

def GaussianNoise(src,means,sigma,percetage):

NoiseImg=src

NoiseNum=int(percetage*src.shape[0]*src.shape[1])

for i in range(NoiseNum):

randX=random.randint(0,src.shape[0]-1)

randY=random.randint(0,src.shape[1]-1)

NoiseImg[randX, randY]=NoiseImg[randX,randY]+random.gauss(means,sigma)

if NoiseImg[randX, randY] 0:

NoiseImg[randX, randY]=0

elif NoiseImg[randX, randY]255:

NoiseImg[randX, randY]=255

return NoiseImg

def PepperandSalt(src,percetage):

NoiseImg=src

NoiseNum=int(percetage*src.shape[0]*src.shape[1])

for i in range(NoiseNum):

randX=random.randint(0,src.shape[0]-1)

randY=random.randint(0,src.shape[1]-1)

if random.randint(0,1)=0.5:

NoiseImg[randX,randY]=0

else:

NoiseImg[randX,randY]=255

return NoiseImg

covereqg = GaussianNoise(covereq, 2, 4, 0.8)

CV2.imwrite('covereqg.png', covereqg)

covereqps = PepperandSalt(covereq, 0.05)

CV2.imwrite('covereqps.png', covereqps)

下面開始均值濾波和中值濾波了

就以n x n為例,均值濾波就是用這n x n個(gè)像素點(diǎn)灰度值的平均值代替中心點(diǎn),而中值就是中位數(shù)代替中心點(diǎn),邊界點(diǎn)周圍補(bǔ)0;前兩個(gè)函數(shù)的作用是算出這個(gè)點(diǎn)的灰度值,后兩個(gè)是對(duì)整張圖片進(jìn)行

#均值濾波模板

def mean_filter(x, y, step, img):

sum_s = 0

for k in range(x-int(step/2), x+int(step/2)+1):

for m in range(y-int(step/2), y+int(step/2)+1):

if k-int(step/2) 0 or k+int(step/2)+1 img.shape[0]

or m-int(step/2) 0 or m+int(step/2)+1 img.shape[1]:

sum_s += 0

else:

sum_s += img[k][m] / (step*step)

return sum_s

#中值濾波模板

def median_filter(x, y, step, img):

sum_s=[]

for k in range(x-int(step/2), x+int(step/2)+1):

for m in range(y-int(step/2), y+int(step/2)+1):

if k-int(step/2) 0 or k+int(step/2)+1 img.shape[0]

or m-int(step/2) 0 or m+int(step/2)+1 img.shape[1]:

sum_s.append(0)

else:

sum_s.append(img[k][m])

sum_s.sort()

return sum_s[(int(step*step/2)+1)]

def median_filter_go(img, n):

img1 = copy.deepcopy(img)

for i in range(img.shape[0]):

for j in range(img.shape[1]):

img1[i][j] = median_filter(i, j, n, img)

return img1

def mean_filter_go(img, n):

img1 = copy.deepcopy(img)

for i in range(img.shape[0]):

for j in range(img.shape[1]):

img1[i][j] = mean_filter(i, j, n, img)

return img1

完整main代碼如下:

if __name__ == "__main__":

# 讀入原始圖像

img = CV2.imread('joi.jpg')

# 灰度化處理

gray = CV2.cvtColor(img, CV2.COLOR_BGR2GRAY)

CV2.imwrite('img.png', gray)

rows = img.shape[0]

cols = img.shape[1]

cover = copy.deepcopy(gray)

for i in range(rows):

for j in range(cols):

cover[i][j] = chng(cover[i][j])

CV2.imwrite('cover.png', cover)

covereq = hist_equal(cover)

CV2.imwrite('covereq.png', covereq)

covereqg = GaussianNoise(covereq, 2, 4, 0.8)

CV2.imwrite('covereqg.png', covereqg)

covereqps = PepperandSalt(covereq, 0.05)

CV2.imwrite('covereqps.png', covereqps)

meanimg3 = mean_filter_go(covereqps, 3)

CV2.imwrite('medimg3.png', meanimg3)

meanimg5 = mean_filter_go(covereqps, 5)

CV2.imwrite('meanimg5.png', meanimg5)

meanimg7 = mean_filter_go(covereqps, 7)

CV2.imwrite('meanimg7.png', meanimg7)

medimg3 = median_filter_go(covereqg, 3)

CV2.imwrite('medimg3.png', medimg3)

medimg5 = median_filter_go(covereqg, 5)

CV2.imwrite('medimg5.png', medimg5)

medimg7 = median_filter_go(covereqg, 7)

CV2.imwrite('medimg7.png', medimg7)

medimg4 = median_filter_go(covereqps, 7)

CV2.imwrite('medimg4.png', medimg4)

均值濾波

??均值濾波是指用當(dāng)前像素點(diǎn)周圍N·N個(gè)像素值的均值來代替當(dāng)前像素值。使用該方法遍歷處理圖像內(nèi)的每一個(gè)像素點(diǎn),即可完成整幅圖像的均值濾波。

例如,希望對(duì)圖7-7中位于第5行第5列的像素點(diǎn)進(jìn)行均值濾波。

根據(jù)上述運(yùn)算,針對(duì)每一個(gè)像素點(diǎn),都是與一個(gè)內(nèi)部值均為1/25的5×5矩陣相乘,得到均值濾波的計(jì)算結(jié)果,如圖7-11所示。

將使用的5×5矩陣一般化,可以得到如圖7-12所示的結(jié)果。

式中,M和N分別對(duì)應(yīng)高度和寬度。一般情況下,M和N是相等的,例如比較常用的3×3、5×5、7×7等。如果M和N的值越大,參與運(yùn)算的像素點(diǎn)數(shù)量就越多,圖像失真越嚴(yán)重。

在OpenCV中,實(shí)現(xiàn)均值濾波的函數(shù)是cv2.blur(),其語法格式為:

式中:

通常情況下,使用均值濾波函數(shù)時(shí),對(duì)于錨點(diǎn)anchor和邊界樣式borderType,直接采用其默認(rèn)值即可。

【例7.2】針對(duì)噪聲圖像,使用不同大小的卷積核對(duì)其進(jìn)行均值濾波,并顯示均值濾波的情況。

??從圖中可以看出,使用5×5的卷積核進(jìn)行濾波處理時(shí),圖像的失真不明顯;而使用30×30的卷積核進(jìn)行濾波處理時(shí),圖像的失真情況較明顯。

??卷積核越大,參與到均值運(yùn)算中的像素就會(huì)越多,即當(dāng)前點(diǎn)計(jì)算的是更多點(diǎn)的像素值的平均值。因此,卷積核越大,去噪效果越好,當(dāng)然花費(fèi)的計(jì)算時(shí)間也會(huì)越長,同時(shí)讓圖像失真越嚴(yán)重。在實(shí)際處理中,要在失真和去噪效果之間取得平衡,選取合適大小的卷積核。

中值濾波

一. 中值濾波:

中值濾波器是一種可以使圖像平滑的濾波器。它使用濾波器范圍內(nèi)的像素的中值去代表該范圍內(nèi)所有的像素。中值濾波是消除圖像噪聲最常見的手段之一,特別是消除椒鹽噪聲,中值濾波的效果要比均值濾波更好。

二. python實(shí)現(xiàn)中值濾波和均值濾波,并用兩種濾波器對(duì)受到椒鹽噪聲污染的圖像進(jìn)行去噪

import cv2

import numpy as np

# Median filter

def median_filter(img, K_size=3):

H, W, C = img.shape

## Zero padding

pad = K_size // 2

out = np.zeros((H + pad*2, W + pad*2, C), dtype=np.float)

out[pad:pad+H, pad:pad+W] = img.copy().astype(np.float)

tmp = out.copy()

# filtering

for y in range(H):

? ? for x in range(W):

? ? ? ? for c in range(C):

? ? ? ? ? ? out[pad+y, pad+x, c] = np.median(tmp[y:y+K_size, x:x+K_size, c])

out = out[pad:pad+H, pad:pad+W].astype(np.uint8)

return out

# Average filter

def average_filter(img, G=3):

out = img.copy()

H, W, C = img.shape

Nh = int(H / G)

Nw = int(W / G)

for y in range(Nh):

? ? for x in range(Nw):

? ? ? ? for c in range(C):

? ? ? ? ? ? out[G*y:G*(y+1), G*x:G*(x+1), c] = np.mean(out[G*y:G*(y+1), G*x:G*(x+1), c]).astype(np.int)

return out

# Read image

img = cv2.imread("../paojie_sp.jpg")

# Median Filter and Average Filter

out1 = median_filter(img, K_size=3)

out2 = average_filter(img,G=3)

# Save result

cv2.imwrite("out1.jpg", out1)

cv2.imwrite("out2.jpg", out2)

cv2.waitKey(0)

cv2.destroyAllWindows()

三. 實(shí)驗(yàn)結(jié)果

可以明顯看出,對(duì)于受到椒鹽噪聲污染的圖像,中值濾波往往比均值濾波的去噪效果要好!

四. 參考內(nèi)容:

???

【轉(zhuǎn)載】Python實(shí)現(xiàn)信號(hào)濾波(基于scipy)

利用Python scipy.signal.filtfilt() 實(shí)現(xiàn)信號(hào)濾波

Required input defintions are as follows;

time: Time between samples

band: The bandwidth around the centerline freqency that you wish to filter

freq: The centerline frequency to be filtered

ripple: The maximum passband ripple that is allowed in db

order: The filter order. For FIR notch filters this is best set to 2 or 3, IIR filters are best suited for high values of order. This algorithm is hard coded to FIR filters

filter_type: 'butter', 'bessel', 'cheby1', 'cheby2', 'ellip'

data: the data to be filtered

用python設(shè)計(jì)FIR陷波濾波器


本文名稱:python均值濾波函數(shù) 均值濾波器函數(shù)
網(wǎng)站地址:http://weahome.cn/article/hgiidi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部