【Tensorflow】辅助工具篇——scikit-image介绍

2023-05-16

很多时候我们跑deep learning算法的难点不在于搭建网络,而是数据获取与处理,当你看到大量的数据却无从下手时该是怎样的心情!

这几篇我将为大家介绍目前很多paper代码复现中比较流行的辅助工具

首先我们简要介绍一下scikit-image这个扩展包:

scikit-image (a.k.a. skimage) 是一个图像处理和计算机视觉的算法集合。当然提到图像不得不提opencv,opencv库是CV届绝对的大佬,但是为什么还要用skimage呢?原因是opencv用于我们的tensorflow训练数据预处理实在是太大才小用了,而且opencv的安装也不是很方便。所以,需要一些更加精简轻便的框架来帮助我们做数据预处理,scikit-image就是这样一个扩展包,为什么说轻便?因为安装它只需要一句话:

sudo pip install scikit-image

安装完之后,import就可以使用了

import skimage

ok,我们再来看看它有哪些内容?官网介绍了它的子库:

color:Color space conversion.这个就是颜色空间变换(RGB-Gray等等类似的变换)

data:Test images and example data.这个子库里面有一些标准数据和用于测试的图(好像lena也在里面!)

draw:Drawing primitives (lines, text, etc.) that operate on NumPy arrays.这个库用来画一些几何图形,对于我们数据处理是没什么用的

exposure:Image intensity adjustment, e.g., histogram equalization, etc.调整亮度的一些算法,直方图均衡也在里面

feature:Feature detection and extraction, e.g., texture analysis corners, etc.手工特征检测和提取,类似HOG等,没什么用。。。

filters:Sharpening, edge finding, rank filters, thresholding, etc.锐化,边缘提取等滤波器

graph:Graph-theoretic operations, e.g., shortest paths.图理论的一些操作,寻找最短路径(这都行!!)然而对于我们没什么用。。。

io:Reading, saving, and displaying images and video.很重要的一个子库,读取保存显示图像和视频(它是可以处理视频的)

measure:Measurement of image properties, e.g., similarity and contours.这个是用来比较两张图的(相似性),里面有mse或者香农entropy

morphology:Morphological operations, e.g., opening or skeletonization.形态学操作,关于骨架的,都是经典图像处理里面的东西,deep learning用的也很少

novice:Simplified interface for teaching purposes.用来教学的库,提供了一系列简单的接口,好人性化。。

restoration:Restoration algorithms, e.g., deconvolution algorithms, denoising, etc.恢复算法:反卷积,去噪等

segmentation:Partitioning an image into multiple regions.图像分割算法

transform:Geometric and other transforms, e.g., rotation or the Radon transform.这是我们常用的库,几何和其他变换,如旋转

util:Generic utilities.常用工具,不要小看这个,可能会有很有用的函数!

viewer:A simple graphical user interface for visualizing results and exploringparameters.图像化界面,用来可视化结果


简单介绍完,我们可以开始动手了

先看一看data这个库下面,示例图片都是长什么样子吧

from skimage import data,io

img = data.coffee()
print type(img)
io.imshow(img)

运行了以后,看到img的格式是numpy.ndarry,这就是skimage保存图片的格式,很符合我们Tensorflow训练的要求!

但是为什么不出结果?显然这样是不会成功显示的,因为我们没有使用任何插件,而且不安装Qt,也无法使用skimage自带的viewer。怎么显示?第一想法当然是使用图形化显示界面matplotlib了

from skimage import data,io
import matplotlib.pyplot as plt

img = data.coffee()
#print type(img),img.dtype
plt.imshow(img)
plt.show()

这样就可以正确显示了


另外plt.imshow()这个函数还有大量的参数,这个我们以后再讲

另外可以试一试保存图片等功能


from skimage import data,io

img = data.coffee()
io.imsave('1.jpg',img)

然后转换为灰度图再保存

from skimage import color,io

img = io.imread("1.jpg")
img = color.rgb2gray(img)
io.imsave("2.jpg",img)

此时路径下有两张图,接下来就是一个很重要的功能,skimage其实可以读取一组图片

img = io.imread_collection("*.jpg")

plt.figure()
ax1=plt.subplot(121)
ax2=plt.subplot(122)
ax1.imshow(img[0])
ax2.imshow(img[1],cmap="gray")
plt.show()


还有一些比较重要的功能,例如utils中的crop

from skimage import util,io
import matplotlib.pyplot as plt

img = io.imread("1.jpg")
print img.shape
img = util.crop(img,((50, 50),(100, 100),(0,0)))
print img.shape
plt.imshow(img)
plt.show()


invert函数可以把单个像素值反转,例如我们读取上面保存的灰度图

img = io.imread("2.jpg")
invert_img = util.invert(img)
ax1 = plt.subplot(121)
ax1.imshow(img,cmap="gray")
ax2 = plt.subplot(122)
ax2.imshow(invert_img,cmap="gray")
plt.show()

然后就这样,黑变白,白变黑了,注意这里的invert是像素的invert,不要把图片的翻转混淆过来了


接着是我们训练图片集预处理当中一个很重要的函数pad,用来填充

numpy_pad是使用numpy的pad模式来填充的函数,具体怎么使用呢?

img = io.imread("2.jpg")
pad_img = util.numpy_pad(img,((10,10),(10,10)),'constant',constant_values=0)
ax1 = plt.subplot(121)
ax1.imshow(img,cmap="gray")
ax2 = plt.subplot(122)
ax2.imshow(pad_img,cmap="gray")
plt.show()

这里((10,10),(10,10))分别指代在图片的第一维,第二维前后加10像素,这些像素的值是什么呢,后面是赋值模式,我用了constant,即常量,赋为0

于是结果如下:

比原来又多加了一条黑边


最后介绍同样重要的一个函数util.random_noise

它可以往图片中增加噪声,这对于我们泛化一个模型,或者做样本对抗是非常有帮助的

img = io.imread("2.jpg")
noise_img = util.random_noise(img,mode='gaussian')
ax1 = plt.subplot(121)
ax1.imshow(img,cmap="gray")
ax2 = plt.subplot(122)
ax2.imshow(noise_img,cmap="gray")
plt.show()


OK!简单介绍到这里,下一期我们就一个图片集预处理的程序来作为使用例程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Tensorflow】辅助工具篇——scikit-image介绍 的相关文章

随机推荐

  • typescript

    TypeScript TypeScript 是一种给 JavaScript 添加特性的语言扩展 支持es6 xff0c 是微软提出的一种编程语言 TypeScript 设计目标是开发大型应用 xff0c 它可以编译成纯 JavaScript
  • 串口打印中途无log出来,显示console:$字样,一段时间后才再显示

    调试时 xff0c 我们在外接串口打印log时 xff0c 发现lk打印完成后跳转到kernel阶段 xff0c 显示console 字样 xff0c 过一段时间后才重新开始打印log xff0c 这样导致我们抓取的log不全 xff0c
  • 【Hexo】域名绑定篇

    关于Hexo的一切 我的Hexo专栏 零 前言 继上篇 xff0c 本篇主要讨论购买域名以及如何绑定并进行解析 一 购买 我这里只推荐两个平台 xff1a 阿里云官网和 腾讯云官网 xff0c 选择你中意的即可 我买的是一个很辣鸡的域名ww
  • 配置一个好看的PowerShell

    工作生活中用到 PowerShell 的时刻其实有很多 xff0c 但是那深蓝色的背景实在让人想吐槽几句 今天我们就来美化一下它 xff0c 几十种花里胡哨的主题任你选择 用到的是oh my posh xff0c 跟oh my zsh类似
  • scikit-learn介绍-非常流行的python机器学习库

    scikit learn是一个建立在Scipy基础上的用于机器学习的Python模块 在不同的应用领域中 xff0c 已经大展出为数众多的基于Scipy的工具包 xff0c 他们统称为Scikits 而在所有的分支版本中 xff0c sci
  • redis

    redis Redis 是一个Key Value 数据库 xff0c 主要用于存储缓存 redis支持的数据类型 xff1a String字符串 xff1a 设置key值 xff1a set key value string类型是二进制安全
  • 多生产者——多消费者问题

    问题背景 假设有四个人 xff1a 父亲 母亲 女儿 儿子 xff0c 和一个空盘子 xff0c 里面最多放一个水果 父亲每次向盘子中放一个苹果 xff0c 女儿只会吃苹果 母亲每次向盘子中放一个橘子 xff0c 儿子只会吃橘子 这个问题可
  • Android-MVVM-Databinding的原理、用法与封装

    前言 说起 DataBinding ViewBinding 的历史 xff0c 可谓是一波三折 xff0c 甚至是比 Dagger Hilt 还要传奇 说起依赖注入框架 Dagger2 Hilt xff0c 也是比较传奇 xff0c 刚出来
  • day03 Python基础

    day03 Python基础 版权声明 xff1a 本博客转载自路飞学城Python全栈开发培训课件 xff0c 仅用于学习之用 xff0c 严禁用于商业用途 xff0c 未经授权 xff0c 严禁转载 欢迎访问路飞学城官网 xff1a h
  • 最新Spire.pdf Spire.Doc Spire.Xls等无水印使用

    Aspose与Spire功能都很强大 xff0c 为什么要选择Spire xff0c Spire支持WPF组件 xff0c Aspose默认没有 新建 net6控制台程序 xff0c 用NuGet包添加Spire PDF引用 添加代码 us
  • 使用Pyinstaller发布带界面的程序(解决找不到文件问题)

    Pyinstaller Pyinstaller可以用来打包python代码 xff0c 生成可执行文件 xff08 主流平台都可以 xff09 xff0c 介绍就不说了 xff0c 可以百度或者去官网看看 xff1a https www p
  • 动态分配内存——new/delete

    动态分配内存 1 使用new分配内存2 使用delete释放内存3 例子 xff1a 数组编译时分配内存和运行时分配内存4 动态数组补充 xff1a 程序的内存分配 1 使用new分配内存 使用格式 xff1a span class tok
  • Spring学习(一) Spring环境配置

    工具原料 xff1a JDK Eclipse IDEA 开始学Spring xff0c 应该已经安好java环境了 xff0c 这里我就不赘述了 xff0c 直接开始开始下一步的教程 配置spring环境需要导入spring相关的jar包
  • vue-lottie动画效果(进阶篇)

    vue lottie动画效果 以下是个人见解部分 个人见解 xff1a 优点 xff1a 简单高效 xff0c 动画文件小 xff0c 丝滑流畅 xff0c 动画可控性强 缺点 xff1a 依赖包非常重 xff0c 对动画要求不高的项目不太
  • Ubuntu18.04设置开机自启动自己的程序、脚本

    Ubuntu18 04设置开机自启动自己的程序 脚本 本文使用的机器是win10 43 Ubuntu18 04双系统 xff0c 虚拟机上的Ubuntu18 04操作一样 xff0c 均可参考此文 参考链接 xff0c 言简意赅 xff0c
  • 【Qt】【QDebug】【日志】实用的Qt日志打印-打印时间-线程-数据等信息

    Qt QDebug 日志 实用的Qt日志打印 打印时间 线程 数据等信息 在开发audio和video相关软件时 xff0c 收发速率很关键 xff0c 我们需要打印时间和线程等相关信息等日志 include lt QDebug gt 获取
  • DNS(域名解析协议)详解

    DNS协议 我们之前已经了解过ARP协议 如果说ARP协议是用来将IP地址转换为MAC地址 xff0c 那么DNS协议则是用来将域名转换为IP地址 xff08 也可以将IP地址转换为相应的域名地址 xff09 我们都知道 xff0c TCP
  • Mybatis之使用注解开发CRUD

    上一篇演示了如何使用XML来操作Mybatis实现CRUD xff0c 但是大量的XML配置文件的编写是非常烦人的 因此 Mybatis也提供了基于注解的配置方式 xff0c 下面我们来演示一下使用接口加注解来实现CRUD的的例子 首先是创
  • 查看windows服务器的I/O的3种方法

    http blog chinaunix net uid 20344928 id 5597137 html 碎碎念 xff1a 感觉第二种简单 windows查看I O的方法有3种 xff1a 1 任务管理器 打开任务管理器 xff0c 点击
  • 【Tensorflow】辅助工具篇——scikit-image介绍

    很多时候我们跑deep learning算法的难点不在于搭建网络 xff0c 而是数据获取与处理 xff0c 当你看到大量的数据却无从下手时该是怎样的心情 xff01 这几篇我将为大家介绍目前很多paper代码复现中比较流行的辅助工具 首先