数字图像处理 第四章 P157 小错误
2024-09-02 18:17:12
问题
我认为P157中部的卷积公式是错的,f(x)h(x-m)应当写为f(m)h(x-m)
解决方法
为了证明,我就用我蹩脚的python实现一下图4.28左列
源代码如下
import numpy as np
import matplotlib.pyplot as plt m = np.arange(-1000,1000)#本来想设置为0-1000呢,但是有h(-m)存在,只能设置为(-1000,1000) #实现函数f(m)并绘制
fm = np.zeros(2000)
fm[1000:1300] = 3
f1 = plt.figure(1)
p1 = plt.subplot(511)
p1.plot(m,fm)
plt.xlabel('m')
plt.ylabel("f(m)")
plt.xlim(-1000,1000) #实现h(m)
hm = np.zeros(2000)
hm[1000:1200] = 2
p2 = plt.subplot(512)
p2.plot(m,hm)
plt.xlabel('m')
plt.ylabel("h(m)")
plt.xlim(-1000,1000) #实现h(-m)
h_m = np.zeros(2000)
for i in range(2000):
h_m[i] = hm[1999-i]#哈哈,初中的知识诶
p3 = plt.subplot(513)
p3.plot(m,h_m)
plt.xlabel('m')
plt.ylabel("h(-m)")
plt.xlim(-1000,1000) #实现h(x-m)
x = 800
h_x_m = np.zeros(2000)
h_x_m[800:2000] = h_m[800-x:2000-x]#左加右减,至于为啥选800-2000,这是为了适应x的值,x的范围是0-800
p4 = plt.subplot(514)
p4.plot(m,h_x_m)
plt.xlabel('m')
plt.ylabel("h(x-m)")
plt.xlim(-1000,1000) #实现f(x)卷积g(x)
fx_gx = np.zeros(2000)
for x in range(800):
h_x_m[800:2000] = h_m[800 - x:2000 - x] # 左加右减
sum = 0
for m_temp in range(400):
sum += fm[1000+m_temp]*h_x_m[1000+m_temp]
fx_gx[1000+x] = sum
p5 = plt.subplot(515)
p5.plot(m,fx_gx)
plt.xlabel('m')
plt.ylabel("f(x)*g(x)")
plt.xlim(-1000,1000) plt.show()
使用f(m)h(x-m),得到书中的结果,如下:
和书中的结果相同,若使用f(x)h(x-m),得到如下结果:
与书中结果不一致
结论
f(x)h(x-m)应当写为f(m)h(x-m)
最新文章
- Xftp连接linux(ubuntu)时提示ssh服务器拒绝了密码,请再试一次
- [ROS] Studying Guidance
- jprofiler_监控远程linux服务器的tomcat进程(实践)
- CSS-dl+dt+dd的应用(非常实用)
- 如何搭建Java开发环境(包括下载、安装和配置JDK)和Eclipse的安装
- js 随笔
- QT笔记
- iOS之01-基本语法
- 嵌入资源的方式让Winform使用系统没有的字体,无需安装字体
- Day9 summary
- Asp.Net MVC 中实现跨域访问
- Redis学习笔记(6)-SortedSet
- ChatForFun 公众号使用说明
- storyBoard中切换应用启动的切入点方法
- 轻松学习Linux之自动执行任务
- Web Capacity Analysis Tool 压力测试工具使用笔记
- (转)asp.net基础-HttpModule
- python 解析xml 文件: DOM 方式
- java多线程向数据库写入数据
- Qt学习 之 多线程程序设计(QT通过三种形式提供了对线程的支持)