• 挑战图像处理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滤波
    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
  • 相关阅读:
    团队作业开发过程
    UVM基础之--------uvm_root
    UVM基础之------uvm_transaction
    UVM基础之----uvm_object
    UVM挑战及概述
    定制UVM Messages(参考)
    SV creation order
    IC验证概念总结
    win7 硬盘安装suse双系统启动顺序更改
    suse 下的gcc安装
  • 原文地址:https://www.cnblogs.com/Jack-Tim-TYJ/p/12831908.html
Copyright © 2020-2023  润新知