使用二階微分銳化圖像(拉普拉斯算子)基本原理及Python實現


1. 拉普拉斯算子

1.1 簡介

一種典型的各向同性的微分算子,可用於檢測圖像中灰度圖片的區域

$$ \nabla^{2} f=\frac{\partial^{2} f}{\partial x^{2}}+\frac{\partial^{2} f}{\partial y^{2}} $$

根據上述的差分近似可以推導出

$$ \nabla^{2} f(x, y)=f(x+1, y)+f(x-1, y)+f(x, y+1)+f(x, y-1)-4 f(x, y) $$

1.2 銳化過程

  1. 使用拉普拉斯過濾器得到圖像中灰度突變的區域$\nabla^{2} f(x, y)$
  2. 使用原圖像加上$\nabla^{2} f(x, y)$,如下

$$ g(x, y)=f(x, y)+c\left[\nabla^{2} f(x, y)\right] $$

  • 其中c為可變參數

2. 測試

 圖源自skimage

3. 代碼

 1 import numpy as np  2 
3
4 def laplace_sharpen(input_image, c): 5 ''' 6 拉普拉斯銳化 7 :param input_image: 輸入圖像 8 :param c: 銳化系數 9 :return: 輸出圖像 10 ''' 11 input_image_cp = np.copy(input_image) # 輸入圖像的副本 12 13 # 拉普拉斯濾波器 14 laplace_filter = np.array([ 15 [1, 1, 1], 16 [1, -8, 1], 17 [1, 1, 1], 18 ]) 19 20 input_image_cp = np.pad(input_image_cp, (1, 1), mode='constant', constant_values=0) # 填充輸入圖像 21 22 m, n = input_image_cp.shape # 填充后的輸入圖像的尺寸 23 24 output_image = np.copy(input_image_cp) # 輸出圖像 25 26 for i in range(1, m - 1): 27 for j in range(1, n - 1): 28 R = np.sum(laplace_filter * input_image_cp[i - 1:i + 2, j - 1:j + 2]) # 拉普拉斯濾波器響應 29 30 output_image[i, j] = input_image_cp[i, j] + c * R 31 32 output_image = output_image[1:m - 1, 1:n - 1] # 裁剪 33 34 return output_image

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM