当前位置: 首页 > news >正文

使用scipy处理图片——滤镜处理

大纲

  • black_tophat
  • white_tophat
  • convolve
  • correlate
  • gaussian_filter
  • gaussian_laplace
  • maximum_filter
  • median_filter
  • minimum_filter
  • percentile_filter
  • prewitt
  • rank_filter
  • sobel
  • spline_filter
  • uniform_filter
  • 基础代码
  • 代码仓库

在《使用numpy处理图片——模糊处理》一文中,我们介绍了如何使用scipy库进行滤镜处理。本文我们将通过9宫格的形式,展现不同参数时滤镜效果。

black_tophat

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagegenerate('lena.png', 'black_tophat.png', ndimage.black_tophat, 1, 91, 10)

对应的size(ndimage.black_tophat第二个参数)的值

11121
314151
617181

在这里插入图片描述

white_tophat

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagedef func(*args):return ndimage.white_tophat(args[0], args[1])generate('lena.png', 'white_tophat.png', func, 1, 91, 10)

对应的size(ndimage.white_tophat第二个参数)的值

11121
314151
617181

在这里插入图片描述

convolve

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagedef func(*args):weights = np.eye(args[1])return ndimage.convolve(args[0], weights)generate('lena.png', 'convolve.png', func, 1, 10, 1)

对应的weights(ndimage.convolve第二个参数)的维度是

123
456
789

在这里插入图片描述

correlate

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagedef func(*args):weights = np.eye(args[1])return ndimage.correlate(args[0], weights)generate('lena.png', 'correlate.png', func, 1, 10, 1)

对应的weights(ndimage.correlate第二个参数)的维度是

123
456
789

在这里插入图片描述

gaussian_filter

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagegenerate('lena.png', 'gaussian_filter.png', ndimage.gaussian_filter, 1, 10, 1)

对应的sigma(ndimage.gaussian_filter第二个参数)的值

123
456
789

在这里插入图片描述

gaussian_laplace

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagegenerate('lena.png', 'gaussian_laplace.png', ndimage.gaussian_laplace, 0.2, 1.9, 0.2)

对应的sigma(ndimage.black_tophat第二个参数)的值

0.20.40.6
0.81.01.2
1.41.61.8

在这里插入图片描述

maximum_filter

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagegenerate('lena.png', 'maximum_filter.png', ndimage.maximum_filter, 1, 10, 1)

对应的size(ndimage.maximum_filter第二个参数)的值

123
456
789

在这里插入图片描述

median_filter

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagegenerate('lena.png', 'median_filter.png', ndimage.median_filter, 1, 10, 1)

对应的size(ndimage.median_filter第二个参数)的值

123
456
789

在这里插入图片描述

minimum_filter

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagegenerate('lena.png', 'minimum_filter.png', ndimage.minimum_filter, 1, 10, 1)

对应的size(ndimage.minimum_filter第二个参数)的值

123
456
789

在这里插入图片描述

percentile_filter

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagedef func(*args):return ndimage.percentile_filter(args[0], percentile=args[1], size=args[1])generate('lena.png', 'percentile_filter.png', func, 1, 10, 1)

对应的percentile和size(ndimage.percentile_filter第二、三个参数)的值

123
456
789

在这里插入图片描述

prewitt

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagedef func(*args):return ndimage.prewitt(args[0])generate('lena.png', 'prewitt.png', func, 1, 2, 1)

在这里插入图片描述

rank_filter

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagedef func(*args):return ndimage.rank_filter(args[0], rank=args[1], size=args[1]*2)generate('lena.png', 'rank_filter.png', func, 1, 10, 1)

对应的rank(ndimage.rank_filter第二个参数)的值

123
456
789

对应的size(ndimage.rank_filter第三个参数)的值

246
81012
141618

在这里插入图片描述

sobel

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagedef func(*args):return ndimage.sobel(args[0])generate('lena.png', 'sobel.png', func, 1, 2, 1)

在这里插入图片描述

spline_filter

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagedef func(*args):return ndimage.spline_filter(args[0], args[1]).astype(np.uint8)generate('lena.png', 'spline_filter.png', func, 2, 5, 1)

对应的size(ndimage.black_tophat第二个参数)的值

234

在这里插入图片描述

uniform_filter

import sys 
sys.path.append("..") 
from frame import *
import scipy.ndimage as ndimagedef func(*args):return ndimage.uniform_filter(args[0], args[1])generate('lena.png', 'uniform_filter.png', func, 1, 10, 1)

对应的size(ndimage.uniform_filter第二个参数)的值

123
456
789

在这里插入图片描述

基础代码

# frame.py
import numpy as np
from PIL import Image
import scipy.ndimage as ndimagedef generate(image_from, image_to, filter, start = 1, end = 10, step = 1):source = np.array(Image.open(image_from))colorDim3List = np.dsplit(source, 3)red = colorDim3List[0].reshape(source.shape[0], source.shape[1])green = colorDim3List[1].reshape(source.shape[0], source.shape[1])blue = colorDim3List[2].reshape(source.shape[0], source.shape[1])def inline_filter(red, green, blue, some_value):redFilter = filter(red, some_value)greenFilter = filter(green, some_value)blueFilter = filter(blue, some_value)return np.dstack((redFilter, greenFilter, blueFilter))varrays = []harrays = []hindex = 0for i in np.arange(start, end, step):filter3D = inline_filter(red, green, blue, i)harrays.append(filter3D)hindex += 1if hindex % 3 == 0:varrays.append(np.hstack(harrays))harrays = []hindex = 0if varrays == []:varrays.append(np.hstack(harrays))full3D = np.vstack(varrays)Image.fromarray(full3D).save(image_to)

代码仓库

https://github.com/f304646673/scipy-ndimage-example/tree/main/

相关文章:

  • Rust 错误处理(上)
  • 爬虫之Cookie获取:利用浏览器模拟一个cookie出来、面对反爬虫、加密的cookie的应对方法
  • 如何在CentOS 7 中搭建Python 3.0 环境
  • 项目管理十大知识领域之项目整体管理
  • 车载音频EMI的产生及典型音频功放AW836XX的解决方案
  • C#使用Stopwatch实现执行耗时及性能监测
  • JavaScript类型检测【全】
  • 20240116-唯一出现次数
  • Java后端学习路线
  • ssh -T git@github.com Connection timed out 解决方案-自测有效
  • 【征稿进行中|见刊快速】2024年社会发展与艺术鉴赏国际学术会议(IACSDAA 2024)
  • uniapp如何实现跨端适配
  • vite+vue3创建项目及开发常见的问题
  • 【数据结构和算法】反转链表
  • 在国产操作系统下管理MYSQL数据库
  • 【347天】每日项目总结系列085(2018.01.18)
  • 03Go 类型总结
  • chrome扩展demo1-小时钟
  • CSS 提示工具(Tooltip)
  • CSS中外联样式表代表的含义
  • leetcode386. Lexicographical Numbers
  • overflow: hidden IE7无效
  • React Native移动开发实战-3-实现页面间的数据传递
  • 爱情 北京女病人
  • 工作中总结前端开发流程--vue项目
  • 后端_MYSQL
  • 机器学习中为什么要做归一化normalization
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 精彩代码 vue.js
  • 区块链将重新定义世界
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用API自动生成工具优化前端工作流
  • 使用parted解决大于2T的磁盘分区
  • 收藏好这篇,别再只说“数据劫持”了
  • 小程序测试方案初探
  • 【干货分享】dos命令大全
  • !$boo在php中什么意思,php前戏
  • #ifdef 的技巧用法
  • #Java第九次作业--输入输出流和文件操作
  • (12)Hive调优——count distinct去重优化
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (原創) 物件導向與老子思想 (OO)
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core中Emit的使用
  • .net refrector
  • .NET连接数据库方式
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • @TableLogic注解说明,以及对增删改查的影响
  • @Transactional 详解
  • [20140403]查询是否产生日志
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
  • [BJDCTF2020]The mystery of ip