• 挑战图像处理100问(19)——LoG滤波器


    在这里插入图片描述

    LoG滤波器

    LoG即高斯-拉普拉斯(Laplacian of Gaussian)的缩写,使用高斯滤波器使图像平滑化之后再使用拉普拉斯滤波器使图像的轮廓更加清晰。

    为了防止拉普拉斯滤波器计算二次微分会使得图像噪声更加明显,所以我们首先使用高斯滤波器来抑制噪声。

    LoG 滤波器使用以下式子定义:
    LoG(x,y)=x2+y2s22 π s6 ex2+y22 s2 ext{LoG}(x,y)=frac{x^2 + y^2 - s^2}{2 pi s^6} e^{-frac{x^2+y^2}{2 s^2}}

    代码实现
    import cv2 # 我只用它来做图像读写和绘图,没调用它的其它函数哦
    import numpy as np # 进行数值计算
    from numpy import random # numpy中的随机函数
    
    # LoG滤波函数
    def LoG_filter(img, K_size=3, K_sigma=3):
    	# 获取图片尺寸
    	
    	H, W, C = img.shape
    
    	# 图像边缘补零
    	pad = K_size // 2 # 使图像边缘能与滤波器中心对齐
    	out = np.zeros((H+2*pad, W+2*pad, C), dtype=np.float)
    	out[pad:pad+H, pad:pad+W] = img.copy().astype(np.float)
    
    	# 滤波器系数设置
    	K = np.zeros((K_size, K_size), dtype=np.float)
    	for x in range(-pad, -pad+K_size):
    		for y in range(-pad, -pad+K_size):
    			K[y + pad, x + pad] = (x ** 2 + y ** 2 - K_sigma ** 2) * np.exp( -(x ** 2 + y ** 2) / (2 * (K_sigma ** 2)))
    
    	K /= (2 * np.pi * (K_sigma ** 6))
    	# 归一化
    	K /= K.sum()
    
    	tmp = out.copy()
    
    	# 进行滤波
    	for h in range(H):
    		for w in range(W):
    			out[pad + y, pad + x] = np.sum(K * tmp[y: y + K_size, x: x + K_size])
    
    	out = np.clip(out, 0, 255)
    	out = out[pad: pad + H, pad: pad + W].astype(np.uint8)
    
    	return out
    
    # 读取图片
    path = 'C:/Users/86187/Desktop/image/'
    
    
    file_in = path + 'cake.jpg' 
    file_out = path + 'LoG_filter.jpg' 
    img = cv2.imread(file_in)
    
    # 获取图片尺寸
    size = img.shape
    
    # 创建一幅同样大小的噪声图加到原图像上
    img_noise = 20 * random.standard_normal(size) #乘以20是为了让噪声看起来大一些
    img = img + img_noise
    
    cv2.imwrite(path+'cake_noise.jpg', img)
    
    # 调用函数进行LoG滤波
    out = LoG_filter(img, K_size=3, K_sigma=3)
    # 保存图片
    cv2.imwrite(file_out, out)
    cv2.imshow("result", out)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    结果展示
    原图 加噪声 LoG滤波
    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
  • 相关阅读:
    JUnit4的使用
    Android中使用JUnit4测试发生fatal error
    计算器的M+是什么意思
    初识Ildasm.exe——IL反编译的实用工具
    jsp下载
    jsp文件上传
    java.sql.SQLException: Io 异常:
    在PowerDesigner中创建物理模型时DBMS选项为空
    oracle10g还原被drop的表
    oracle创建用户
  • 原文地址:https://www.cnblogs.com/Jack-Tim-TYJ/p/12831908.html
Copyright © 2020-2023  润新知