第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波18 - 低通、高通、带阻和带通滤波器、组合使用空间增强方法

低通、高通、带阻和带通滤波器

得到空间滤波器的第三种方法,生成一维滤波器函数,然后要么使用式(3.42)w=vvTw = vv^Tw=vvT生成二维可分离的滤波器函数,要么旋转这些一维函数来生成二维核。旋转后的一维函数是圆对称(各向同性)函数的近似。

# 低通、高通、带阻和带通滤波器
x = np.arange(100)
y = np.where(x > 50, x, 1)
lp = np.where(x < 50, y, 0)hp = 1 - lpplt.figure(figsize=(16, 8))
plt.subplot(2, 2, 1), plt.plot(lp), plt.title('Low Pass'), plt.xticks([]), plt.yticks([0, 1]), plt.ylim([0, 2])
plt.subplot(2, 2, 2), plt.plot(hp), plt.title('High Pass'), plt.xticks([]), plt.yticks([0, 1]), plt.ylim([0, 2])y = np.where(x > 30, x, 1)
l_1 = np.where(x < 30, y, 0)y = np.where(x > 70, x, 1)
l_2 = np.where(x < 70, y, 0)
h_1 = 1 - l_2br = h_1 + l_1
plt.subplot(2, 2, 3), plt.plot(br), plt.title('Band Resitant'), plt.xticks([]), plt.yticks([0, 1]), plt.ylim([0, 2])
bp = 1 - br
plt.subplot(2, 2, 4), plt.plot(bp), plt.title('Band Pass'), plt.xticks([]), plt.yticks([0, 1]), plt.ylim([0, 2])plt.show()

在这里插入图片描述

同心反射板
z(x,y)=12[1+cos(x2+y2)](3.66)z(x, y) = \frac{1}{2}[1 + cos(x^2 + y^2)] \tag{3.66}z(x,y)=21[1+cos(x2+y2)](3.66)
xxxyyy在区间[-8.2, 8.2],变化量为0.0275,所以会得到一幅597×597597\times597597×597的图像。边缘的黑色区域是通过将中心距离大于8.2的所有像素设置为0得到的。

597的中心是(298, 298),像素的距离应该是298

# 同心反射板
height, width = 597, 597
m = int((height - 1) / 2)
n = int((width - 1) / 2)
X = np.linspace(-8.2, 8.2, height)
Y = np.linspace(-8.2, 8.2, width)
x, y = np.meshgrid(X, Y)
circle = 0.5 * (1 + np.cos(x**2 + y**2))
for i in range(circle.shape[0]):for j in range(circle.shape[1]):if np.sqrt((i - m)**2 + (j - n)**2 ) > m:circle[i, j] = 0else:continueplt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1), plt.imshow(circle, 'gray'), plt.title('Concentric circles'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 2, 2), plt.plot(circle[298, :]), plt.title('Frequency'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

这是之前写的,感觉有点不对

# 一维空间低通滤波器函数通过式(3.42)构造的二维低通滤波器
height, width = 128, 128
m = int((height - 1) / 2)
n = int((width - 1) / 2)
x = np.linspace(-6*np.pi, 6* np.pi, height)
y = np.linspace(-6*np.pi, 6* np.pi, width)
scale = 1                  # scale可以缩放滤波器的尺寸
x = np.sin(x * scale) / x
y = np.sin(y * scale) / y
x = np.array([x])
y = np.array([y])w = x * y.T# for i in range(w.shape[0]):
#     for j in range(w.shape[1]):
#         if np.sqrt((i - m)**2 + (j - n)**2 ) > m:
#             w[i, j] = 0
#         else:
#             continue
plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1), plt.imshow(w, 'gray'), plt.title('Concentric circles'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 2, 2), plt.plot(w[64, :]), plt.title('Frequency'), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

新增: 这个才像函数旋转得到的
图像看起来有点粗糙,是采样少了,只有128,如果增加到512,会得到很好的效果。

# 一维空间低通滤波器函数通过式(3.42)构造的二维低通滤波器
height, width = 128, 128
m = int((height - 1) / 2)
n = int((width - 1) / 2)
x = np.linspace(-1*np.pi, 1* np.pi, height)
y = np.linspace(-1*np.pi, 1* np.pi, width)
x, y = np.meshgrid(x, y)
scale = 1                  # scale可以缩放滤波器的尺寸
w = np.sinc((x**2 + y**2) * scale)for i in range(w.shape[0]):for j in range(w.shape[1]):if np.sqrt((i - m)**2 + (j - n)**2 ) > m:w[i, j] = 0else:continue
plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1), plt.imshow(w, 'gray'), plt.title('Concentric circles'), plt.xticks([]), plt.yticks([])
plt.subplot(1, 2, 2), plt.plot(w[64, :]), plt.title('Frequency'), #plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

# 不同的滤波器对同心圆反射板的效果,图1效果不是很好
img_ori = circle.copy()kernel_size = 19
x = np.ones([kernel_size])
x[kernel_size//3:] = 0.1
y = np.ones_like(x)
x = np.array([x])
y = np.array([y])
w = x * y.T
img_sep = separate_kernel_conv2D(img_ori, w)
img_sep = np.uint8(normalize(img_sep) * 255)# 各向同性
height, width = img_ori.shape[:2]
m = int((height - 1) / 2)
n = int((width - 1) / 2)
x = np.linspace(-6*np.pi, 6* np.pi, 21)
y = np.linspace(-6*np.pi, 6* np.pi, 21)
scale = 0.5                  # scale可以缩放滤波器的尺寸
x = np.sin(x * scale) / (x + 1e-8)
y = np.sin(y * scale) / (y + 1e-8)
x = np.array([x])
y = np.array([y])w = x * y.Timg_sep_1 = separate_kernel_conv2D(img_ori, w)
img_sep_1 = np.uint8(normalize(img_sep_1) * 255)plt.figure(figsize=(15, 12))
plt.subplot(1, 2, 1), plt.imshow(img_sep,   'gray', vmax=255), plt.title("Original"), plt.xticks([]), plt.yticks([])
plt.subplot(1, 2, 2), plt.imshow(img_sep_1, 'gray', vmax=255), plt.title("Sobel"), plt.xticks([]), plt.yticks([])plt.tight_layout()
plt.show()

在这里插入图片描述

组合使用空间增强方法

# 1 拉普拉斯突出细节
# 2 平滑后的梯度图像来掩蔽拉普拉斯图像
# 3 灰度变换增大灰度级的动态范围
# 图1
img_ori = cv2.imread("DIP_Figures/DIP3E_Original_Images_CH03/Fig0343(a)(skeleton_orig).tif", 0)# 图2,拉普拉斯变换
# kernel_laplacian = np.array((
#                     [0,1,0],
#                     [1,-4,1],
#                     [0,1,0]), np.int8)
kernel_laplacian_d = np.array([[-1, -1, -1],[-1, 8, -1],[-1, -1, -1]],)
img_laplacian = cv2.filter2D(img_ori, ddepth=-1, kernel=kernel_laplacian_d)
img_laplacian = np.uint8(normalize(img_laplacian) * 255)# 图3,原图+拉普拉斯
img_ori_laplacian = img_ori + img_laplacian
img_ori_laplacian = normalize(img_ori_laplacian) * 255# 图4,原图Sobel变换
sobel_x = np.zeros([3, 3], np.int)
sobel_x[0, :] = np.array([-1, -2, -1])
sobel_x[2, :] = np.array([1, 2, 1])
sobel_y = np.zeros([3, 3], np.int)
sobel_y[:, 0] = np.array([-1, -2, -1])
sobel_y[:, 2] = np.array([1, 2, 1])
# gx = separate_kernel_conv2D(img_ori, kernel=sobel_x)
# gy = separate_kernel_conv2D(img_ori, kernel=sobel_y)
gx = cv2.filter2D(img_ori, ddepth=-1, kernel=sobel_x)
gy = cv2.filter2D(img_ori, ddepth=-1, kernel=sobel_y)
# thred = 120
# gx = np.where(gx >= thred, gx, 0)
# gx = np.where(gx < thred, gx, 1)
# gy = np.where(gy >= thred, gy, 0)
# gy = np.where(gy < thred, gy, 1)
# 先对gx gy做二值化处理再应用下面的公式
# img_sobel = np.sqrt(gx**2 + gy**2)   
img_sobel = abs(gx) + abs(gy)
img_sobel = np.uint8(normalize(img_sobel) * 255)#  图5, 使用5x5的盒式滤波器平滑Sobel
kernel_box = np.ones([5, 5])
kernel_box = kernel_box / kernel_box.sum()
sobel_box = separate_kernel_conv2D(img_sobel, kernel=kernel_box)
sobel_box = normalize(sobel_box)
# sobel_box = np.uint8(normalize(sobel_box) * 255)# 图6,图2与图5相乘的模板图像
mask = img_laplacian * sobel_box
img_mask = np.uint8(normalize(mask) * 255)# 图7,原图与图6相加
img_passi = img_ori + img_mask * 0.3
img_passi = np.uint(normalize(img_passi) * 255)# 图8 对图7做幂律变换
img_gamma = gamma_transform(img_passi, 1, gamma=0.5)plt.figure(figsize=(13, 40))
plt.subplot(4, 2, 1), plt.imshow(img_ori,   'gray', vmax=255), plt.title("OriginalA"), plt.xticks([]), plt.yticks([])
plt.subplot(4, 2, 2), plt.imshow(img_laplacian, 'gray', vmax=255), plt.title("LaplacianB"), plt.xticks([]), plt.yticks([])
plt.subplot(4, 2, 3), plt.imshow(img_ori_laplacian, 'gray', vmax=255), plt.title("Original + LaplacianC"), plt.xticks([]), plt.yticks([])
plt.subplot(4, 2, 4), plt.imshow(img_sobel, 'gray', vmax=255), plt.title("SobelD"), plt.xticks([]), plt.yticks([])
plt.subplot(4, 2, 5), plt.imshow(sobel_box, 'gray', vmax=1), plt.title("Sobel Box filterE"), plt.xticks([]), plt.yticks([])
plt.subplot(4, 2, 6), plt.imshow(img_mask, 'gray', vmax=255), plt.title("Sobel mask F"), plt.xticks([]), plt.yticks([])
plt.subplot(4, 2, 7), plt.imshow(img_passi, 'gray', vmax=255), plt.title("Passivation G"), plt.xticks([]), plt.yticks([])
plt.subplot(4, 2, 8), plt.imshow(img_gamma, 'gray', vmax=255), plt.title("Gamma Transform H"), plt.xticks([]), plt.yticks([])
plt.tight_layout()
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux Tomcat 6.0安装配置实践总结

系统环境&#xff1a; Red Hat Enterprise Linux Server release 5.7 (Tikanga) 64位 Tomcat下载 从官方网站 http://tomcat.apache.org/下载你需要的Tomcat版本&#xff0c;目前Tomcat主要版本有Tomcat 6.0、Tomcat 7.0、Tomcat 8.0三个版本&#xff0c;下面我们以6.0(6.0.39…

第4章 Python 数字图像处理(DIP) - 频率域滤波1 - 傅里叶级数和变换简史

本章主要讲解频域域滤波的技术&#xff0c;主要技术用到是大家熟悉的傅里叶变换与傅里叶反变换。这里有比较多的篇幅讲解的傅里叶的推导进程&#xff0c;用到Numpy傅里叶变换。本章理论基础比较多&#xff0c;需要更多的耐心来阅读&#xff0c;有发现有错误&#xff0c;可以与我…

分页探究--Filter+JSTL

最近卡了一个功能就是分页&#xff0c;查了很多资料&#xff0c;分页大概是两种类型&#xff1a;一种是把数据库的东西全部查出来然后放在session里&#xff0c;用list一页一页传到页面&#xff0c;这样的消耗比较大;另一种就是使用sql语句的limit来进行数据库分页查询。我使用…

python能做大型游戏吗_python有做大型游戏的潜力吗?

著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 岂止是有潜力&#xff0c;简直是很合适&#xff01; 猪厂两大游戏客户端引擎&#xff0c;NeoX 和 Messiah&#xff0c;都使用 Python 作为脚本语言。 你最近所了解的比较火的挂着猪厂旗号的&a…

第4章 Python 数字图像处理(DIP) - 频率域滤波2 - 复数、傅里叶级数、连续单变量函数的傅里叶变换、卷积

目录基本概念复数傅里叶级数冲激函数及其取样&#xff08;筛选&#xff09;性质连续单变量函数的傅里叶变换卷积基本概念 复数 复数CCC的定义为 CRjI(4.3)C R jI \tag{4.3}CRjI(4.3) R,IR,IR,I为实数&#xff0c;RRR是实部&#xff0c;III是虚部&#xff0c;j−1j \sqrt{-…

不要迷失在技术的海洋中【转】

转自http://www.cnblogs.com/lovecherry/archive/2007/10/28/940555.html 不要迷失在技术的海洋中 技术就好像一片汪洋大海&#xff0c;越深入越望不到边际。就拿自己的体验来说吧&#xff0c;2000年的时候在学校搞ASP&#xff0c;觉得网页开发就是这么简单&#xff0c;把数据库…

使用代码设置Item级的权限(权限总结1)

itle in english:set Item Level Permission for SharePoint (MOSS/WSS) List/Document Library Programmatically 有些时候&#xff0c;我们需要为文档库里面某个文件设置特殊的权限&#xff0c;这个权限不继承自列表权限&#xff0c;当然最简单的最好是再创建一个列表&#…

echarts 4.0.4怎么下载_怎么让ECharts的提示框tooltip自动轮播?

1. 怎么让ECharts的提示框tooltip自动轮播?在用ECharts做大屏或者可视化展示项目的时候&#xff0c;让提示框tooltip自动轮播是比较常见的需求&#xff0c;给大家推荐一个插件叫echarts-tooltip-auto-show,名字是有点长&#xff0c;但是挺好用的。在hover显示tooltip之后&…

[React Native]高度自增长的TextInput组件

之前我们学习了从零学React Native之11 TextInput了解了TextInput相关的属性。 在开发中,我们有时候有这样的需求, 希望输入区域的高度随着输入内容的长度而增长, 如下&#xff1a; 这时候我们需要自定义一个组件&#xff1a; 在项目中创建AutoExpandingTextInput.js import …

第4章 Python 数字图像处理(DIP) - 频率域滤波3 - 取样和取样函数的傅里叶变换、混叠

目录取样和取样函数的傅里叶变换取样取样后的函数的傅里叶变换取样定理混叠由取样后的数据重建&#xff08;复原&#xff09;函数取样和取样函数的傅里叶变换 取样 fˉ(t)f(t)sΔT(t)∑n−∞∞f(t)δ(t−nΔT)(4.27)\bar f(t) f(t)s_{\Delta T}(t) \sum_{n-\infty}^{\infty}…

[转]Android开发,实现可多选的图片ListView,便于批量操作

本文转自&#xff1a;http://www.cnblogs.com/gergulo/archive/2011/06/14/2080629.html 之前项目需要实现一个可多选的图片列表&#xff0c;用户选中一到多张图片后&#xff0c;批量上传。但是网上有可多选普通列表的代码、也有单纯图片列表的代码&#xff0c;却没有两者合并的…

个人信息安全影响评估指南_发布 | 网络安全标准实践指南—移动互联网应用程序(App)收集使用个人信息自评估指南...

关于发布《网络安全标准实践指南—移动互联网应用程序(App)收集使用个人信息自评估指南》的通知信安秘字[2020] 40号各有关单位&#xff1a;为落实《网络安全法》相关要求&#xff0c;围绕中央网信办、工信部、公安部、市场监管总局联合制定的《App违法违规收集使用个人信息行为…

在线生成 CSS3 的工具

1) CSS Creator – Layout Design 2) CSS Menu Maker 3) CSS3 Please 4) CSS3 Generator 5) CSS Border Radius 6) CSS3 Gradient Generator 7) CSS3 Button Generator 8 ) Mike Plate’s CSS3 Playground 9) Border Image Generator 10) CSS3 WRAP 11) Button Maker 12) Font…

python image 转成字节_就是这么牛!三行Python代码,让数据处理速度提高2到6倍

本文可以教你仅使用 3 行代码&#xff0c;大大加快数据预处理的速度。Python 是机器学习领域内的首选编程语言&#xff0c;它易于使用&#xff0c;也有很多出色的库来帮助你更快处理数据。但当我们面临大量数据时&#xff0c;一些问题就会显现……在默认情况下&#xff0c;Pyth…

第4章 Python 数字图像处理(DIP) - 频率域滤波5 - 二变量函数的傅里叶变换、图像中的混叠、二维离散傅里叶变换及其反变换

目录二变量函数的傅里叶变换二维冲激及其取样性质二维连续傅里叶变换对二维取样和二维取样定理图像中的混叠二维离散傅里叶变换及其反变换二变量函数的傅里叶变换 二维冲激及其取样性质 两个连续变量的冲激函数定义为&#xff1a; δ(t,z){1,tz00,others(4.52)\delta(t, z) …

QC4+充电协议_一文看懂各家充电协议!总算彻底理清了

五一小长假马上就要到了&#xff0c;虽说今年的五一小长假是一个长达5天的“Plus”版小长假&#xff0c;但是受到疫情的影响&#xff0c;大多数人还是选择了在家中度过这个假期。既然说到了宅在家里度过这个假期&#xff0c;那么很多人都会选择让手机来陪伴自己度过。虽然最近几…

类图 示例

神州六号飞船是神州飞船系统的一种&#xff0c;它由轨道舱、返回舱、推进舱和逃逸求生塔等组成&#xff1b;航天员可以在返回舱内驾驶飞船&#xff0c;轨道舱由是航天员工作和休息的场所。在紧急的情况下&#xff0c;可以利用逃逸求生塔逃生。在飞船两侧有多个太阳能电池翼&…

bat 命令返回结果_bat教程[284] unzip解压

古树屋Click to follow us(1)unzip命令的简介C:\Users\86137\Desktop>unzip -hUnZip 6.00 of 20 April 2009, by Info-ZIP. Maintained by C. Spieler. Sendbug reports using http://www.info-zip.org/zip-bug.html; see README for details.Usage: unzip [-Z] [-opts[mo…

Framework7:不会Objective-C,也能开发iOS7应用

摘要&#xff1a;Framework7是一款开源的轻量级HTML框架&#xff0c;用来创建混合或有着iOS7原生体验的Web应用。其包含HTML布局、所有基础界面、动画效果、视图以及简单的自定义样式&#xff0c;让你无需修炼Objective-C语言&#xff0c;就可以构建自己的iOS7应用。 Framework…

第4章 Python 数字图像处理(DIP) - 频率域滤波7 - 二维DFT和IDFT的一些性质 - 傅里叶频谱和相角

目录二维DFT和IDFT的一些性质傅里叶频谱和相角二维DFT和IDFT的一些性质 傅里叶频谱和相角 F(u,v)R(u,v)jI(u,v)∣F(u,v)∣ejϕ(u,v)(4.86)F(u, v) R(u, v) jI(u, v) |F(u, v)|e^{j\phi(u,v)} \tag{4.86}F(u,v)R(u,v)jI(u,v)∣F(u,v)∣ejϕ(u,v)(4.86) 幅度&#xff0c;称为…