程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2024-11(2)

LoG滤波器实现及应用

发布于2020-03-19 09:03     阅读(998)     评论(0)     点赞(6)     收藏(5)


一. LoG滤波器

        LoG 即 高斯-拉普拉斯(Laplacian of Gaussian)的缩写。为了防止拉普拉斯滤波器计算二次微分时使图像的噪声更加明显,所以先使用高斯滤波器使图像更加平滑,再使用拉普拉斯滤波器使图像的轮廓更加清晰。       

LoG 滤波器,s 代表高斯滤波的标准差 ↑


二. 实验:LoG滤波器的实现及用于图像边缘检测

        实验中,我们先将BGR图像转换为灰度图像,再给灰度图像添加高斯噪声,再使用LoG滤波器对图像进行处理,最后输出处理结果

  1. import cv2
  2. import numpy as np
  3. # Gray scale
  4. def BGR2GRAY(img):
  5. b = img[:, :, 0].copy()
  6. g = img[:, :, 1].copy()
  7. r = img[:, :, 2].copy()
  8. # Gray scale
  9. out = 0.2126 * r + 0.7152 * g + 0.0722 * b
  10. out = out.astype(np.uint8)
  11. return out
  12. # add gaussian noise
  13. def gasuss_noise(image, mean=0, var=0.001):
  14. '''
  15. 添加高斯噪声
  16. mean : 均值
  17. var : 方差
  18. '''
  19. image = np.array(image/255, dtype=float)
  20. noise = np.random.normal(mean, var ** 0.5, image.shape)
  21. out = image + noise
  22. if out.min() < 0:
  23. low_clip = -1.
  24. else:
  25. low_clip = 0.
  26. out = np.clip(out, low_clip, 1.0)
  27. out = np.uint8(out*255)
  28. return out
  29. # LoG filter
  30. def LoG_filter(img, K_size=5, sigma=3):
  31. H, W = img.shape
  32. # zero padding
  33. pad = K_size // 2
  34. out = np.zeros((H + pad * 2, W + pad * 2), dtype=np.float)
  35. out[pad: pad + H, pad: pad + W] = gray.copy().astype(np.float)
  36. tmp = out.copy()
  37. # LoG Kernel
  38. K = np.zeros((K_size, K_size), dtype=np.float)
  39. for x in range(-pad, -pad + K_size):
  40. for y in range(-pad, -pad + K_size):
  41. K[y + pad, x + pad] = (x ** 2 + y ** 2 - sigma ** 2) * np.exp( -(x ** 2 + y ** 2) / (2 * (sigma ** 2)))
  42. K /= (2 * np.pi * (sigma ** 6))
  43. K /= K.sum()
  44. # filtering
  45. for y in range(H):
  46. for x in range(W):
  47. out[pad + y, pad + x] = np.sum(K * tmp[y: y + K_size, x: x + K_size])
  48. out = np.clip(out, 0, 255)
  49. out = out[pad: pad + H, pad: pad + W].astype(np.uint8)
  50. return out
  51. # Read image
  52. img = cv2.imread("../paojie.jpg")
  53. # grayscale
  54. gray = BGR2GRAY(img)
  55. # add gaussian noise
  56. gray = gasuss_noise(gray)
  57. # LoG filtering
  58. out = LoG_filter(gray, K_size=5, sigma=3)
  59. # Save result
  60. cv2.imwrite("out_g_g.jpg",gray)
  61. cv2.imshow("result_g_g",gray)
  62. cv2.imwrite("out.jpg", out)
  63. cv2.imshow("result", out)
  64. cv2.waitKey(0)
  65. cv2.destroyAllWindows()

 


三. 实验结果:

图1:灰度图像添加高斯噪声后 ↑

图2:LoG滤波器对图1图像处理后 ↑

        从图像中可以观察到,LoG滤波器不仅有效地抑制了高斯噪声,还一定程度上增强了图像的边缘。


四. 参考内容:

        https://www.jianshu.com/p/c70be0cccd46

        https://www.cnblogs.com/wojianxin/p/12508834.html

原文链接:https://blog.csdn.net/Ibelievesunshine/article/details/104915362



所属网站分类: 技术文章 > 博客

作者:战天

链接:https://www.pythonheidong.com/blog/article/268069/efec8f0b48c4c4e84adf/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

6 0
收藏该文
已收藏

评论内容:(最多支持255个字符)