图像处理100题(11-20)

11.均值滤波:

import cv2
import numpy as np
#Mean filter
def mean_filter(img,K_size=3):
    if len(img.shape) == 3:
        H,W,C = img.shape
    else:
        H,W,C = np.expand_dims(img,axis=-1)
        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()
    #filter
    for y in range(H):
        for x in range(W):
            for c in range(C):
                out[y+pad,x+pad,c] = np.mean(tmp[y:y+K_size,x:x+K_size,c])
    out = out[pad:pad+H,pad:pad+W].astype(np.uint8)
    return out
img = cv2.imread('full.jpg')
out = mean_filter(img)
cv2.imshow('11',out)
cv2.waitKey(0)

12.Motion Filter:

import numpy as np
import cv2
#Motion filter
def motion_filter(img,K_size=3):
        H,W,C = img.shape
        
        #kernel
        K = np.diag([1]*K_size).astype(np.float)
        K /= K_size
        
        #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()
        
        #filter
        for y in range(H):
            for x in range(W):
                for c in range(C):
                    out[pad+y,pad+x,c] = np.sum(K*tmp[y:K_size+y,x:K_size+x,c])
        out = out[pad:pad+H,pad:pad+W].astype(np.uint8)
    
        return out    
img = cv2.imread('full.jpg')
out= motion_filter(img)
cv2.imshow('11',out)
cv2.waitKey(0)

13.MAX-MIN滤波器:

import numpy as np
import cv2
#Gray scale
def BGR2GRAY(img):
    b = img[:,:,0].copy()
    g = img[:,:,1].copy()
    r = img[:,:,2].copy()
    
    out = 0.2126*r + 0.7152*g+0.0722*b
    out =  out.astype(np.uint8)
    return out
#max-min filter
def max_min_filter(img,K_size=3):
    H,W = img.shape
    
    #zero padding
    pad = int(K_size)
    out = np.zeros((H+2*pad,W+2*pad),dtype=np.float)
    out[pad:pad+H,pad:pad+W] = gray.copy().astype(np.float)
    tmp = out.copy()
    
    #filtering
    for y in range(H):
        for x in range(W):
            out[pad+y,pad+x] = np.max(tmp[y:y+K_size,x:x+K_size])-np.min(tmp[y:y+K_size,x:x+K_size])
            
    out = out[pad:pad+H,pad:pad+W].astype(np.uint8)
    
    return out
img = cv2.imread('test.jpg')
gray = BGR2GRAY(img)
out = max_min_filter(gray)
cv2.imshow('11',out)
cv2.waitKey(0)

14.差分滤波器 (Difffferential Filter):

def BGR2GRAY(img):
    b = img[:,:,0].copy()
    g = img[:,:,1].copy()
    r = img[:,:,2].copy()
    out = 0.2126*r + 0.7152*g+0.0722*b
    out = out.astype(np.uint8)
    return out
def differential_filter(gray,K_size = 3):
    H,W = gray.shape
    
    #zero padding
    pad = K_size//2
    out = np.zeros((H+2*pad,W+2*pad),dtype=np.float)
    out[pad:pad+H,pad:pad+W] = gray.copy().astype(np.uint8)
    tmp = out.copy()
    out_v = out.copy()
    out_h = out.copy()
    
    filter_v = np.array(([[0 ,-1, 0],[0 ,1 ,0],[0 ,0 ,0]]),dtype=np.float)
    filter_h= np.array(([[0 ,0 ,0],[-1, 1, 0],[0, 0, 0]]),dtype=np.float)
    
    #filter
    for y in range(H):
        for x in range(W):
            out_v[y+pad,x+pad] = np.sum(filter_v*(tmp[y:y+K_size,x:x+K_size]))
            out_h[y+pad,x+pad] = np.sum((filter_h*tmp[y:y+K_size,x:x+K_size]))
            
    out_v = np.clip(out_v, 0, 255)
    out_h = np.clip(out_h, 0, 255)
    
    out_v = out_v[pad:pad+H,pad:pad+W].astype(np.uint8)
    out_h = out_h[pad:pad+H,pad:pad+W].astype(np.uint8)
    return out_v,out_h
img = cv2.imread('test.jpg')
gray = BGR2GRAY(img)
out_v,out_h = differential_filter(gray)
cv2.imshow('11',out_v)
cv2.imshow('22',out_h)
cv2.waitKey(0)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值