zoukankan      html  css  js  c++  java
  • 挑战图像处理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滤波
    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
  • 相关阅读:
    鱼群生长曲线分析
    记住这一刻,学会感恩
    编译boost命令
    ASP之SOAP的发送、接收与处理类[转载]
    在WinForm中使用WebServices来实现软件自动升级(AutoUpdate)(C#)[转载]
    .Net下采用GET/POST/SOAP方式动态调用WebService的简易灵活方法(C#) [轉]Redfox
    使用 HttpWebRequest 类调用 WEB 服务的示例(C#)【转载】
    Log4Net使用指南
    C# post xml using HttpWebRequest/Response
    XmlHttp对象简介[转载]
  • 原文地址:https://www.cnblogs.com/Jack-Tim-TYJ/p/12831908.html
Copyright © 2011-2022 走看看