python实现平滑线性滤波器——数字图像处理

原理:

平滑线性滤波器是一种在图像处理中广泛使用的工具,主要用于降低图像噪声或模糊细节。这些滤波器的核心原理基于对图像中每个像素及其邻域像素的线性组合。

邻域平均:

平滑线性滤波器通过对目标像素及其周围邻域像素的强度值取平均来工作。这个操作使得图像中的每个像素值变得更加接近其邻域的平均值。

滤波器核(Kernel):

滤波器通过一个称为"核"或"掩膜"的小窗口来应用。这个核定义了邻域的大小和形状,通常是一个小的、方形的矩阵。

核中的每个值(权重)决定了相应像素在平均过程中的重要性。
卷积操作

平滑过程是通过卷积操作实现的,即将核在图像上滑动,并在每个位置上应用加权平均。

对于图像中的每个像素,核覆盖的区域内的像素值与核的相应权重相乘,然后求和得到新的像素值。

常见的平滑线性滤波器
均值滤波器:

最简单的平滑线性滤波器是均值滤波器,它使用的核具有相等的权重,即所有邻域像素的权重相同。

高斯滤波器:

高斯滤波器使用的核基于高斯函数,它为中心像素赋予更高的权重,而远离中心的像素权重较低。

这种类型的滤波器在保留边缘信息的同时,对噪声的平滑效果更好。
应用

平滑线性滤波器主要用于去噪和图像模糊化。在去除噪声时,它们可以帮助减少图像中随机的颜色波动。但是,这种平滑也可能导致图像细节的损失,特别是在边缘区域。因此,选择合适的核大小和类型对于平衡去噪和保持图像细节非常重要。

使用python实现下列过程

提示

采用的平滑模板大小分别为3,5,9,15,35,大小为3的模板

其余大小模板类似。可以写一个函数实现图像与模板卷积(相关)的过程,步骤包括:根据模板大小为图像填充0边界;双层for循环遍历图像的每个像素点,每次取与模板大小相同的图像块与模板相乘并求和,np.multiply可以实现矩阵逐元素相乘,np.sum实现矩阵求和。

python代码

python 复制代码
import cv2
import numpy as np
from matplotlib import pyplot as plt


def correl2d(img, window):
    m = window.shape[0]
    n = window.shape[1]

    # 图像边界填0扩展
    img_border = np.zeros((img.shape[0] + m - 1, img.shape[1] + n - 1))
    img_border[(m - 1) // 2:img.shape[0] + (m - 1) // 2, (n - 1) // 2:img.shape[1] + (n - 1) // 2] = img
    img_result = np.zeros(img.shape)
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            temp = img_border[i:i + m, j:j + n]
            img_result[i, j] = np.sum(np.multiply(temp, window))
    return img_result


img = cv2.imread('Fig0333.tif', 0)

img_list = [img]
img_name_list = ['original']
size = [3, 5, 9, 15, 35]
for m in size:
    window = np.ones((m, m)) / (m ** 2)
    img_result = correl2d(img, window)
    img_list.append(img_result)
    img_name_list.append('m=' + str(m))

_, axs = plt.subplots(2, 3)

for i in range(2):
    for j in range(3):
        axs[i, j].imshow(img_list[i * 3 + j], cmap='gray')
        axs[i, j].set_title(img_name_list[i * 3 + j])
        axs[i, j].axis('off')

plt.savefig('box_filter.jpg')
plt.show()

结果展示

相关推荐
ai大模型中转api测评几秒前
解密 GPT-5.5:原生多模态架构如何重定义 AI 逻辑推理与精准制图
大数据·人工智能·gpt·架构·api
冷雨夜中漫步3 分钟前
Claude Code源码分析——Claude Code Agent Loop 详细设计文档
java·开发语言·人工智能·ai
xixixi777777 分钟前
英伟达Agent专用全模态模型出击,仿冒AI智能体泛滥成灾,《AI伦理安全指引》即将落地——AI治理迎来“技术-风险-规范”三重奏
人工智能·5g·安全·ai·大模型·英伟达·智能体
程序员-小李7 分钟前
uv 学习总结:从零到一掌握现代化 Python 工具链
python·学习·uv
直奔標竿9 分钟前
Java开发者AI转型第二十六课!Spring AI 个人知识库实战(五)——联网搜索增强实战
java·开发语言·人工智能·spring boot·后端·spring
数据皮皮侠AI13 分钟前
中国城市可再生能源数据集(2005-2021)|顶刊 Sci Data 11 种能源面板
大数据·人工智能·笔记·能源·1024程序员节
Python大数据分析@15 分钟前
CLI一键采集,使用Python搭建TikTok电商爬虫Agent
开发语言·爬虫·python
G311354227317 分钟前
如何用 QClaw 龙虾做一个规律作息健康助理 Agent
大数据·人工智能·ai·云计算
幂律智能18 分钟前
零售行业合同管理数智化转型解决方案
大数据·人工智能·零售
旺财矿工19 分钟前
零基础搭建 OpenClaw 2.6.6 Win11 本地化运行环境
人工智能·openclaw·小龙虾·龙虾·openclaw安装包