Python OpenCV中值濾波

2021-09-17 23:35:37 字數 1882 閱讀 3557

import cv2 as cv

import numpy as np

def rgb2gray(img):

h=img.shape[0]

w=img.shape[1]

img1=np.zeros((h,w),np.uint8)

for i in range(h):

for j in range(w):

img1[i,j]=0.144*img[i,j,0]+0.587*img[i,j,1]+0.299*img[i,j,2]

return img1

def noise(img,snr):

h=img.shape[0]

w=img.shape[1]

img1=img.copy()

sp=h*w # 計算影象畫素點個數

np=int(sp*(1-snr)) # 計算影象椒鹽雜訊點個數

for i in range (np):

randx=np.random.randint(1,h-1) # 生成乙個 1 至 h-1 之間的隨機整數

randy=np.random.randint(1,w-1) # 生成乙個 1 至 w-1 之間的隨機整數

if np.random.random()<=0.5: # np.random.random()生成乙個 0 至 1 之間的浮點數

img1[randx,randy]=0

else:

img1[randx,randy]=255

return img1

def median(img):

h=img.shape[0]

w=img.shape[1]

img1 = np.zeros((h, w), np.uint8)

for i in range (1,h-1):

for j in range (1,w-1):

temporary = np.zeros(9, np.uint8)

s=0for k in range (-1,2):

for l in range (-1,2):

temporary[s]=img[i+k,j+l]

s+=1

for y in range (8):

count=y

for x in range (y,8):

if temporary[count]>temporary[x+1]:

count=x+1

temporary[y],temporary[count]=temporary[count],temporary[y]

median=temporary[4]

img1[i,j]=median

return img1

image=cv.imread("d:/testdata/selina.png")

grayimage=rgb2gray(image)

snr=0.9 # 將椒鹽雜訊訊雜比設定為0.9

noiseimage=noise(grayimage,snr)

medianimage=median(noiseimage)

cv.imshow("grayimage",grayimage)

cv.imshow("noiseimage",noiseimage)

cv.imshow("medianimage",medianimage)

cv.waitkey(0)

cv.destroyallwindows()

實驗結果:

從結果中可以清晰的看到椒鹽雜訊被中值濾波器濾清,效果相對理想。

halcon median image中值濾波

功能 中值濾波。median image使用乙個正方形或圓形的掩碼對輸入的影象進行中值濾波,濾波結果返回到imagemedian中。可以使用masktype選擇掩碼的形狀。可以使用 radius 選擇掩碼的半徑 一般的,中值濾波器會按公升序對掩碼中的所有灰度值進行排序,然後選擇灰度值的中值 中值濾波...

大頂堆和小頂堆的上濾和下濾

總結一下 上濾一般應用於在乙個已經排序好的二叉堆中插入乙個新節點。首先在堆末新建乙個空間,稱為空穴,然後比較穴的值和其父節點的值。從巨集觀上看,空穴會自下而上地到達滿足堆序的位置。下濾一般應用於刪除了堆頂後的堆序重整過程中。刪除堆頂後把新的堆頂放置在滿足堆序的正確的位置上。分兩種情況 若是大頂堆 哪...

C 資料結構之堆 上濾下濾以及用於排序

includeusing namespace std 堆,就是一棵完全二叉樹,物理儲存方式是陣列,一般情況下,都犧牲第乙個元素arr 0 剩下的就滿足了從1開始計數 若堆從1開始計數,那麼對於乙個節點i,2 i是它的左孩子,2 i 1是它的右孩子 對的最基本操作,包括上濾和下濾 上濾是指 h 1,n...