python图像处理基础知识(plt库函数说明)

本文详细介绍了Python图像处理中plt库的常用函数,包括plt.figure用于设置图表属性,plt.plot绘制二维图形,plt.xticks定制x轴刻度,plt.show和plt.close显示与关闭图像,plt.subplot创建子图,plt.legend设置图例,plt.title和ax2.set_title添加标题,plt.text插入文本,plt.xlabel定义横轴标签,plt.grid控制网格线,以及plt.hist绘制直方图。这些函数是进行数据可视化和图像处理的基础工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python图像处理基础知识,plt库函数说明


import matplotlib.pyplot as plt

1.画图(plt库)

1.1 plt.figure(num=’’,figsize=(x, y),dpi= ,facecolor=’’,edgecolor=’’)

num:表示整个图标的标题
figsize:表示尺寸
facecolor:表示

1.2 plt.plot(x,y,format_string,**kwargs)

x,y:表示自变量和因变量
format_string:简单表示:颜色-每个点的标记样式-线样式 (和MATLAB一样),具体见链接可查
**kwargs:表示更细致的表达(优先级高于format_string):
color 颜色 ,可以用RGB表示,也可以是’r’这种形式
linestyle 线条样式
marker 标记风格
markerfacecolor 标记颜色
markersize 标记大小

1.3 plt.xticks(np.linspace(a,b,n,endpoint=bool))

a,b:x坐标的范围
n:x坐标分成几等分
endpoint:包不包括最后一个,False表示不包括,True表示包括

1.4 plt.show() 和 plt.close()

一般在pc的时候使用,在jupyter notebook的时候不用,并且很多语句都用不到

1.5 plt.subplot(222)

frameon=True

1.6 plt.legend(frameon=False,loc=“upper right”,fontsize=‘small’)

frameon:该图例有无框,False表示不包括,True表示包括
loc:图例位置一般系统会默认最好的位置(best),不过有些情况需要自己调。将一块平面分为九个方向,分别为: 右上“upper right”,右下“lower right”,正右“right”,左上“upper left”,左下“lower left”,中央偏左“center left”,中央偏上“upper center”,中央偏下“lower center”,正中央“center”
fontsize:图例大小有几种,如果不设置系统默认偏小,自调可以用:‘xx-small’, ‘x-small’, ‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’

1.7 ax2.set_title(‘xxx’) 和 plt.title(‘XXX’)

  1. ax2.set_title(‘xxx’)是当一个figure有两个plot时分别取名
ax2=plt.subplot(212)
ax2.set_title('two')
  1. plt.title(‘XXX’)就是直接给一个图命名

二者都可以在后面加size=20,color='r’操作,用这种定义参数赋值的方法,相比于MATLAB函数要更方便,不会出现缺少参数、参数不对齐的情况,当title和legend需要希腊数字时:" 普 通 字 母 普通字母 “和r” 希 腊 字 母 代 码 希腊字母代码 ",其中和LaTeX命名方式相同,在此链接查询

1.8 plt.text(x, y,‘XXX’,fontsize=18)

x,y:表示添加文字的位置坐标
XXX:表示文字内容
frontsize:表示文字大小

1.9 plt.xlabel(‘XXX’,font1)

XXX:表示横轴名称
font1 = {‘family’ : ‘Arial’, ‘weight’ : ‘normal’, ‘size’ : 18, } #Arial是字体形式,如下图所示:
在这里插入图片描述

1.10 [grid(b, which, axis, color, linestyle, linewidth, **kwargs)]

链接

b : 布尔值。就是是否显示网格线的意思。官网说如果b设置为None, 且kwargs长度为0,则切换网格状态。
which : 取值为’major’, ‘minor’, ‘both’。 默认为’major’。
axis : 取值为‘both’, ‘x’,‘y’。就是以什么轴为刻度生成网格。
color : 设置网格线的颜色。
linestyle :设置网格线的风格
linewidth : 设置网格线的宽度

1.11 n, bins, patches = plt.hist(arr, bins=10, normed=0, facecolor=‘black’, edgecolor=‘black’,alpha=1,histtype=‘bar’)

一般在图像处理中,可以表示灰度直方图,

hist的参数非常多,但常用的就这六个,只有第一个是必须的,后面四个可选
arr: 需要计算直方图的一维数组
bins:直方图的柱数,可选项,默认为10 normed: 是否将得到的直方图向量归一化。默认为0
facecolor: 直方图颜色
edgecolor: 直方图边框颜色
alpha: 透明度
histtype: 直方图类型,‘bar’, ‘barstacked’,‘step’, ‘stepfilled’
返回值 :
n: 直方图向量,是否归一化由参数normed设定
bins:返回各个bin的区间范围
patches: 返回每个bin里面包含的数据,是一个list

<think>嗯,用户想用Python实现维纳滤波进行图像去模糊处理。首先,我需要回忆维纳滤波的基本原理。维纳滤波是一种在频域中进行的图像复原方法,主要用来减少模糊和噪声。它需要估计点扩散函数(PSF)和噪声功率谱与信号功率谱的比值,也就是K值。 接下来,我得考虑如何在Python中实现这个算法。常用的图像处理是OpenCV和scikit-image。但维纳滤波可能在scikit-image中有现成的函数,比如`restoration.wiener`。不过用户可能需要自己手动实现,以更深入理解过程。所以,我需要先提供一个使用库函数的示例,再解释原理,可能的话再给出手动实现的步骤。 然后,用户可能会遇到参数调整的问题,比如PSF的确定和K值的选择。PSF通常需要根据模糊类型来设定,比如运动模糊可以使用特定的核。K值如果太小,去模糊效果可能不明显,太大则可能引入噪声。这部分需要详细说明如何调整参数。 另外,用户的问题中提到图像去模糊,可能需要先进行模糊处理作为示例。比如用运动模糊核卷积原图,再添加噪声,然后用维纳滤波复原。这样整个流程更清晰。 还要注意代码的可读性,使用合适的库函数,比如用numpy进行FFT变换,matplotlib显示图像。同时,处理后的图像可能需要调整数据类型,比如从浮点转换回uint8,避免显示问题。 用户可能还会关心维纳滤波与其他方法(如逆滤波)的区别,以及在实际应用中的注意事项,比如噪声估计困难时的处理办法。这些可以作为相关问题提出,帮助用户扩展知识。 最后,确保引用正确,根据用户提供的引用内容,虽然主要是关于陷波滤波器,但可能相关的图像处理基础可以参考同一资料,所以引用标识要加上。</think>以下是如何使用Python实现维纳滤波进行图像去模糊处理的逐步解决方案: ### 一、维纳滤波原理 维纳滤波是最小均方误差意义下的最优复原滤波器,其频域表达式为: $$ H(u,v) = \frac{1}{H_d(u,v)} \cdot \frac{|H_d(u,v)|^2}{|H_d(u,v)|^2 + K} $$ 其中$H_d(u,v)$是模糊核的傅里叶变换,$K$是噪声功率与信号功率的比值[^1] ### 二、Python实现步骤 #### 1. 准备模糊图像 ```python import cv2 import numpy as np from skimage import restoration # 读取图像并添加运动模糊 img = cv2.imread('input.jpg', 0).astype(np.float32) size = 15 # 模糊核尺寸 kernel = np.zeros((size, size)) kernel[int((size-1)/2), :] = 1 # 水平运动模糊核 kernel /= kernel.sum() blurred = cv2.filter2D(img, -1, kernel) ``` #### 2. 维纳滤波实现 ```python # 计算模糊核的FFT psf = np.zeros_like(img) psf[:kernel.shape[0], :kernel.shape[1]] = kernel H = np.fft.fft2(np.fft.ifftshift(psf)) # 执行维纳滤波 K = 0.01 # 噪声/信号功率比 deblurred = restoration.wiener(blurred, H, K) ``` #### 3. 结果后处理 ```python # 归一化并转换数据类型 deblurred = np.clip(deblurred, 0, 255).astype(np.uint8) # 显示结果 import matplotlib.pyplot as plt plt.figure(figsize=(12,6)) plt.subplot(131), plt.imshow(img, cmap='gray'), plt.title('原图') plt.subplot(132), plt.imshow(blurred, cmap='gray'), plt.title('模糊图像') plt.subplot(133), plt.imshow(deblurred, cmap='gray'), plt.title('维纳滤波结果') plt.show() ``` ### 三、关键参数说明 1. **模糊核估计**:需根据实际模糊类型确定(运动模糊/高斯模糊等) 2. **K值选择**:通常通过实验调整(范围在0.001-0.1之间) 3. **频谱处理**:建议使用`np.fft.fftshift`进行频谱中心化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值