线性代数于工程应用中的实践:以代码实例拆解图像平滑问题的求解逻辑

图像平滑


目录

图像平滑

1.矩阵卷积

2.理解图像

3.图像平滑

4.应用实例


1.矩阵卷积

矩阵卷积是一种基本的图像处理技术,用于在图像上滑动一个卷积核,并通过对卷积核和图像上对应位置的元素进行逐元素相乘,然后求和得到一个新的像素值。矩阵卷积常用于图像处理,可以用于实现各种图像滤波操作,如边缘检测、模糊、锐化等。它也被广泛应用于深度学习中的卷积神经网络(Convolutional Neural Network, CNN),用于提取图像特征。
图一

矩阵卷积在深度学习:卷积神经网络CNN;

矩阵卷积的数学意义:先将卷积核顺时针旋转180°,然后再进行滑动加权求和;

2.理解图像

一张图片通常是由RGB三个颜色通道的灰度图叠加而成,每个灰度图都可以视为一个mxn的矩阵,其中m和n分别表示图像的高度和宽度。以一个大小为1024x512像素的图片为例,其每个灰度图矩阵都是一个1024行x512列的矩阵。矩阵中每个元素的数值范围在0到255之间,不同的值代表了该像素点的亮暗程度,最终通过叠加这三个灰度图的数值,形成一张完整的彩色图片。

3.图像平滑

图像平滑处理是通过对图片灰度图对应的矩阵进行卷积操作实现的。在卷积过程中,采用卷积核对图像矩阵进行处理,旨在使每个像素值与其周围像素值相似,以减轻图像中的明暗变化。参数如卷积核的尺寸、滑动步长以及周围范围等需要根据具体需求进行设计和调整。通过这种处理,可以实现图像的平滑效果,消除图像中的噪点和细节,使图像看起来更加柔和和模糊。在实际应用中,根据任务的不同,可以选择不同的卷积核和参数来实现不同的平滑效果。
图二

4.应用实例

**代码及运行结果**

python 复制代码
import numpy as np
from PIL import Image
from scipy import signal

#1.读取一张图片
picture_filename="pictures/people_picture.jpg"
picture_rgb=Image.open(picture_filename)
picture_rgb.show()

#2.将彩色图片转化为灰度图
picture_gray=picture_rgb.convert('L')
picture_gray.show()

#3.将灰度图转换为像素矩阵
matrix=np.asarray(picture_gray)
print("像素矩阵的行列:",matrix.shape)
#像素矩阵的行列: (420, 420)
print(matrix)
# [[75 75 75 ... 57 57 57]
#  [75 75 75 ... 57 57 57]
#  [75 75 75 ... 57 57 57]
#  ...
#  [20 26 27 ... 11  6  5]
#  [20 26 27 ... 11  6  5]
#  [20 26 27 ... 11  5  4]]

#4.定义卷积核(均值滤波器)
filter_5x5=np.array([[1/49,1/49,1/49,1/49,1/49],
                     [1/49,1/49,1/49,1/49,1/49],
                     [1/49,1/49,1/49,1/49,1/49],
                     [1/49,1/49,1/49,1/49,1/49],
                     [1/49,1/49,1/49,1/49,1/49]])

#sobel算子(检测图像边缘)
# sobel=np.array([[-1,-2,-1],
#                 [0,0,0],
#                 [1,2,1]])

#5.图像平滑(卷积)
result=signal.convolve2d(matrix,filter_5x5,mode='same')
#result1=signal.convolve2d(matrix,sobel,mode='same')
print("卷积后像素矩阵的行列:",result.shape)
#卷积后像素矩阵的行列: (420, 420)
print(np.around(result))
# [[14. 18. 23. ... 17. 14. 10.]
#  [18. 25. 31. ... 23. 19. 14.]
#  [23. 31. 38. ... 29. 23. 18.]
#  ...
#  [ 7. 10. 12. ...  3.  3.  2.]
#  [ 6.  8.  9. ...  2.  2.  2.]
#  [ 4.  6.  7. ...  2.  2.  1.]]

#6.把像素矩阵转换回图片
picture_result=Image.fromarray(result)
picture_result.show()
# picture_result1=Image.fromarray(result1)
# picture_result1.show()

图三


相关推荐
海奥华21 分钟前
进程调度算法 笔记总结
linux·运维·服务器·笔记·学习
梦幻精灵_cq2 分钟前
Linux.date格式化标识“制作”极简台历 vs Python.datetime.strftime格式化“精美”日历牌(时间工具依情境选择也是一种“智慧)
linux·python
ASS-ASH15 分钟前
视觉语言大模型Qwen3-VL-8B-Instruct概述
人工智能·python·llm·多模态·qwen·视觉语言模型·vlm
再__努力1点24 分钟前
【77】积分图像:快速计算矩形区域和核心逻辑
开发语言·图像处理·人工智能·python·算法·计算机视觉
matlabgoodboy28 分钟前
程序代做python代编程matlab代码设计plc深度学习java编写C++代写
python·深度学习·matlab
Evand J31 分钟前
【2026课题推荐】基于小波/互相关/FFT的卡尔曼滤波的轨迹估计,及MATLAB例程的运行结果
开发语言·matlab·目标跟踪·轨迹跟踪
即将进化成人机36 分钟前
验证码生成 + Redis 暂存 + JWT 认证
数据库·redis·笔记
独自归家的兔38 分钟前
Java Robot 详解:系统级鼠标 / 键盘模拟的核心原理与实战
java·开发语言
小灰灰搞电子44 分钟前
Qt 开发环境选择Qt Creator、Visual Studio还是 VS Code?
开发语言·qt·visual studio
何中应1 小时前
Bean的三种注入方式
开发语言·spring boot·后端·spring