基于 python 实现 matlab 中 fspecial 与 imfilter 函数的功能,完成基于拉普拉斯算⼦以及通过索⻉尔算⼦计算出的梯度对图像“CT.jpg”进⾏锐化的任务
时间: 2024-10-22 22:09:28 浏览: 89
基于matlab实现的对图像进行频率域图像增强,计算并画出此图像的中心化频率谱,用拉普拉斯算子对此图像锐化.rar
在Python中,我们可以使用`scipy`库来模拟MATLAB的`fspecial`函数,它用于生成滤波器模板,如Laplacian和Sobel算子。而`skimage.filter`模块则可以实现类似`imfilter`的功能,用于滤波和边缘检测。
首先,我们需要安装所需的库:
```bash
pip install scipy scikit-image
```
然后,我们可以编写一个函数来实现这个任务:
```python
from skimage import filters, io, img_as_float
import numpy as np
from scipy.signal import convolve2d
def create_laplace_filter(kernel_size=3):
laplacian = np.array([[0, -1, 0],
[-1, 4, -1],
[0, -1, 0]])
return laplacian / (kernel_size**2)
def create_sobel_filter(horizontal=True):
sobel_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]]) if horizontal else \
np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])
return sobel_x
def apply_filters(image_path, filter_func, kernel_size=None):
# 读取图像并转换为浮点型
image = img_as_float(io.imread(image_path))
# 如果未指定大小,使用默认值
if not kernel_size:
kernel_size = 3
# 应用滤波器
filtered_image_laplace = convolve2d(image, create_laplace_filter(kernel_size), mode='same')
filtered_image_sobel = convolve2d(image, create_sobel_filter(), mode='same', boundary='symm')
return filtered_image_laplace, filtered_image_sobel
# 使用图像路径
image_path = 'CT.jpg'
laplace_filtered, sobel_filtered = apply_filters(image_path, create_laplace_filter)
io.imshow(laplace_filtered, cmap='gray')
io.show()
io.imshow(sobel_filtered, cmap='gray')
io.show()
阅读全文