使用 SKimage 的图像预处理

这篇具有很好参考价值的文章主要介绍了使用 SKimage 的图像预处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

介绍

图像是视觉对象的二维表示,例如照片、绘画或素描。在数字成像中,图像存储为像素值数组,其中每个像素代表图像亮度和颜色的样本。每个像素的颜色可以由一个或多个通道表示,如传统彩色图像中的红色、绿色和蓝色 (RGB) 通道。在本文中,你将学习各种图像预处理技术。

图像可以使用计算机算法进行处理,以改变它们的外观或提取信息。图像处理技术包括调整大小、裁剪、旋转、过滤和阈值化等操作。这些操作是对像素值执行的,以修改图像或提取有关其内容的信息。图像处理用于许多应用程序,包括计算机视觉、医学成像和数字艺术。

通过使用 SKimage 学习图像预处理,你将能够:

  1. 了解图像预处理在图像分析和机器学习中的重要性。

  2. 了解如何使用各种 SKimage 函数进行图像过滤、增强、恢复和转换。

  3. 应用降噪、边缘检测和图像阈值处理等图像预处理技术来提高图像质量。

  4. 执行常见的图像预处理任务,例如图像大小调整、裁剪和旋转。

  5. 使用特征提取技术从图像中提取有意义的信息。

  6. 为图像分析应用程序实施对象检测算法。

目录

  1. 了解图像数据

  2. 处理图像的步骤

  3. 理解图像中的变换

  4. 如何加载图像?

  5. 如何可视化图像?

  6. 图像预处理—调整图像大小

  7. 图像预处理—重塑图像

  8. 图像预处理—图像旋转

  9. 图像预处理—图像裁剪

  10. 图像预处理—图像翻转

  11. 图像预处理—亮度处理

了解图像数据

让我们来看一张可以分解为数字矩阵的图像,其中每个数字代表强度。这个强度可以取 0(代表黑色)和 255(代表白色)之间。因此,单色图像可以由单个矩阵表示。

但是当它是下面的彩色图像时我们该怎么办呢?

skimage,计算机视觉,人工智能,图像处理,机器学习,算法

如果我们必须表示一个图像,我们会将其分成三个不同颜色的三个图像:红色、绿色和蓝色。我们可以将每种颜色的强度存储在两个单独的矩阵中。

skimage,计算机视觉,人工智能,图像处理,机器学习,算法因此图像将被分解为三个矩阵:一个用于红色,一个用于绿色,一个用于蓝色,这样我们就可以用 N*M*3 矩阵表示图像。

skimage,计算机视觉,人工智能,图像处理,机器学习,算法

任何 n * m 像素宽的图像都可以在计算机中的任何位置定义为矩阵 NM*3。

在处理图像数据时,通常会将图像转换为数字表示形式,例如矩阵,以便计算机算法可以对其进行处理。图像的数字表示称为数字图像,可以使用数学运算来处理数字图像中的数据以执行不同的图像处理任务。

总的来说,理解图像数据对于使用图像处理算法和从图像中提取信息是必要的。

处理图像的步骤

以下是在 Python 中处理图像所涉及的常见步骤:

  1. 导入库:你需要导入将用于处理图像的库,例如 NumPy 和 OpenCV。

  2. 加载图像:你可以使用 OpenCV 中的 imread 函数加载图像。

  3. 预处理:根据图像和所需的结果,你可能需要执行预处理步骤,例如调整大小、灰度化或阈值化。

  4. 操作像素:你可以使用 NumPy 数组操纵图像的像素,以执行裁剪、旋转和进行基于颜色的选择等操作。

  5. 过滤:你可以使用不同的过滤器来平滑或锐化图像,例如高斯或中值过滤器。

  6. 边缘检测:可以使用 Canny 等方法执行的边缘检测用于识别图像中对象之间的边界。

理解图像中的变换

图像中的变换指的是应用于图像的数学运算,以改变其外观或从中提取有用信息。可以应用许多类型的变换到图像中,包括:

  1. 几何变换:这些变换会改变图像中像素之间的空间关系,例如旋转、缩放和平移。

  2. 颜色变换:这些变换会改变图像的颜色属性,例如亮度、对比度和饱和度。

  3. 过滤:过滤是指从图像中去除噪声或增强其特征的过程,如平滑或锐化。

  4. 边缘检测:可以使用 Canny 等方法执行的边缘检测用于识别图像中对象之间的边界。

  5. 特征提取:这是指使用 Harris 角点检测或 SIFT 等算法从图像中提取有意义的信息(如角点或关键点)的过程。

这些转换是使用数学算法执行的,可以在 Python 或 MATLAB 等软件中实现。转换对于图像处理至关重要,并且在计算机视觉、医学图像分析和面部识别等应用中至关重要。

现在我们将开始加载图像并使用 Scikit-Image 库对图像进行一些操作。

如何加载图像?

根据所使用的编程语言和工具,有多种加载图像的方法。下面介绍几种常用的方法:

  1. 使用图像处理库:许多图像处理库,如 OpenCV、Pillow 和 Scikit-Image,都提供将图像加载到内存中的功能。例如,你可以使用 imread 函数在 OpenCV 中加载图像。

  2. 使用图像文件阅读器:你可以使用特定于文件格式(如 JPEG 或 PNG)的函数或类从文件中读取图像数据。例如,你可以使用 Python 中的 imageio 库来读取图像文件。

  3. 从 URL 加载:你可以从 URL 下载图像,然后将其加载到内存中。

将图像上传到内存后,你可以使用图像处理库提供的函数对其进行各种操作,如调整大小、裁剪、颜色转换和过滤。

以下是如何使用 Python 中的 scikit-image (skimage) 库加载图像的示例:

originating from Skimage Import IO
# Open the image
io.imread("image.jpg") = image
# Show the image
io.imshow(image)
io.show()

在此示例中,skimage 库的 io 模块中的 imread 函数用于将图像文件 image.jpg 加载到内存中。然后使用 io 模块中的 imshow 函数显示生成的图像数据,然后调用“io.show()”来显示图像。imshow 函数自动调整显示图像并处理颜色通道和纵横比等问题。

如何可视化图像?

可视化图像涉及在屏幕或输出设备上显示图像数据。可视化图像取决于所使用的编程语言和工具。下面介绍几种常用的方法:

  1. 使用图像处理库:许多图像处理库,如 OpenCV、Pillow 和 scikit-image,都提供显示图像的功能。例如,你可以使用 imshow 函数在 OpenCV 中显示图像。

  2. 使用绘图库:你可以使用绘图库(如 Python 中的 Matplotlib)来显示图像。例如,你可以使用 Matplotlib Pyplot 模块中的 imshow 函数在 Python 中显示图像。

显示图像后,你可以通过放大和缩小、平移和重新调整显示设置来与其进行交互。

以下是如何使用 Python 中的 scikit-image (skimage) 库可视化图像的示例:

from skimage import io
import matplotlib.pyplot as  plt
# Load the image
image = io.imread("image.jpg")
# Display the image
plt.imshow(image)
plt.show()
skimage,计算机视觉,人工智能,图像处理,机器学习,算法

在这个例子中,使用skimage库的“io”模块中的imread函数将一个名为image.jpg的图像文件加载到内存中。然后使用matplotlib.pyplot模块的imshow函数显示结果图像数据,随后调用plt.show()函数来显示图像。

图像预处理—调整图像大小

Python 的“scikit-image”(skimage) 库提供了几个调整图像大小的函数。为此,一个常用的功能是“transform”模块中的“resize”函数。

这是使用 skimage 调整图像大小的示例:

import skimage

from skimage import io,  transform

# Load the image
image = io.imread(“example.jpg”)
resized_image = transform.resize(image, (300, 300))

# Save the resized image
io.imsave(“resized_image.jpg”, resized_image)
skimage,计算机视觉,人工智能,图像处理,机器学习,算法skimage,计算机视觉,人工智能,图像处理,机器学习,算法

在这个例子中,使用 io 模块的 imread 函数读取原始图像。然后,使用 resize 函数将图像调整为大小为 (300, 300) 像素。最后,使用 imsave 函数保存调整大小后的图像。

图像预处理—重塑图像

在Python中,"scikit-image"(skimage)库提供了几个用于重塑图像的函数。以下是使用skimage重塑图像的示例:

# import colour sub-module
from skimage import color
# reading the image
image = imread('index.png')
# converting image to grayscale
grayscale_image = color.rgb2gray(image)
grayscale_image.shape
import numpy as np
new_shape = (grayscale_image.shape[0]*grayscale_image.shape[1])
# reshape 
image2 = np.reshape(grayscale_image, new_shape)
image2.shape

如果将 4 x 4 二维图像转换为一维图像,我们将有 4×4=16 个值。

图像预处理—图像旋转

图像旋转是指以指定角度围绕其中心旋转图像。在scikit-image中,你可以使用transform模块的rotate函数旋转图像。以下是Python中的一个示例:

import numpy as np
from skimage import io
from skimage.transform import rotate
# Load an image
image = io.imread("image.jpg")
# Rotate the image by 180 degrees
rotated_image = rotate(image, angle=180, resize=True)
# Save the rotated image
io.imsave("rotated_image.jpg", rotated_image)
skimage,计算机视觉,人工智能,图像处理,机器学习,算法skimage,计算机视觉,人工智能,图像处理,机器学习,算法

在这个例子中,rotate函数被用来将输入图像旋转180度。rotate函数的第一个参数是输入图像,angle参数指定了旋转角度(以度为单位)。

图像预处理—图像裁剪

图像裁剪是通过指定裁剪区域来提取图像的一部分。在scikit-image中,可以使用切片和索引来裁剪图像。以下是Python示例:

import numpy as np
from skimage import io
# Load an image
image = io.imread("image.jpg")
rows, cols = image.shape[:2]
cropped_image = image[rows//4:-rows//4, cols//4:-cols//4]
# Save the cropped image
io.imsave("cropped_image.jpg", cropped_image)
skimage,计算机视觉,人工智能,图像处理,机器学习,算法skimage,计算机视觉,人工智能,图像处理,机器学习,算法

在这个例子中,首先使用imread函数加载输入图像。裁剪区域通过沿两个维度对图像进行切片来指定,因此删除了行和列的前四分之一和后四分之一。

图像预处理——图像翻转

可以使用 OpenCV 库中的“cv2.flip”函数执行 Python 中的图像翻转。“cv2.flip”函数有两个参数:输入图像和翻转代码。翻转代码指定要执行的翻转,可以是以下值之一:

  • cv2.FLIP_HORIZONTAL:水平翻转图像

  • cv2.FLIP_VERTICAL:垂直翻转图像

  • cv2.FLIP_BOTH:水平和垂直翻转图像

翻转可以认为是旋转的延伸,允许左右和上下翻转图像。

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# reading the image
image = imread('index.png')
image = np.array(image)
imshow(image)
plt.title('Original Image')
skimage,计算机视觉,人工智能,图像处理,机器学习,算法

现在,如果你必须再次翻转图像,该怎么办?

让我们假设我们要进行从左到右的翻转。我可以使用“fliplr()”函数轻松完成此操作,重新读取图像并进行翻转。

# flip image left-to-right
flipLR = np.fliplr(image)
plt.imshow(flipLR)
plt.title('Left to Right Flipped')
skimage,计算机视觉,人工智能,图像处理,机器学习,算法

这些是翻转图像的方法。

图像预处理—亮度处理

可以使用图像库执行 Python 中的亮度操作。图片库提供了曝光模块,其中包含调整gamma的功能,可以用来改变图片的亮度。

可以使用不同亮度的图像使模型对光照条件的变化具有鲁棒性;这对于在室外照明下工作的系统很重要,例如交通信号灯上的闭路电视摄像头。

from skimage.exposure import adjust_gamma
# read the image
image = imread('index.png')
plt.title('Original Image')
imshow(image)
skimage,计算机视觉,人工智能,图像处理,机器学习,算法

我要改变gamma值,这会改变图像的强度。所以,这是明亮的图像。

# brighten the image
bright = adjust_gamma(image,gamma=0.5,gain=1)
imshow(bright)
plt.title('Brightened IMage')
skimage,计算机视觉,人工智能,图像处理,机器学习,算法

结论

Scikit-image 是一个流行的图像处理 Python 库,它提供了处理图像的工具和函数。以下是用于图像处理的图像的一些关键特征的总结:

  1. Image I/O:image提供了读写图片到磁盘的函数,包括imread读取图片和imsave保存图片。

  2. 图像恢复:图像提供了用于恢复退化图像的算法,包括去除噪声和校正模糊或失真的功能。

  3. 图像分析:image 提供分析图像属性的函数,包括直方图、梯度幅度和纹理分析。

  4. 图像可视化:图像提供了用于可视化图像及其属性的函数,包括绘制和显示图像、直方图和图像数据的其他可视化表示。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓文章来源地址https://www.toymoban.com/news/detail-776047.html

到了这里,关于使用 SKimage 的图像预处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像预处理算法————灰度化处理

    图像预处理算法适合在FPGA上完成,原理简单且需要快速处理,通常有灰度化、中值、均值滤波等,以及颜色空间转换算法。 灰度图像是一种特殊的彩色图像(R=G=B的彩色图像) 只有一种颜色分量,单通道的0-255 方法:一般有分量法、最大值法、平均值法、加权平均法四种方

    2024年01月17日
    浏览(51)
  • 图像预处理方法

    两个基本的形态学操作是腐 和膨胀。他们 的变体构成了开运算 ,闭运算, 梯度等。 根据卷积核的大小前景的所有像素会腐 掉 变为 0 ,所以前景物体会变小整幅图像的白色区域会减少。 对于去除白噪声很有用 也可以用来断开两个 在一块的物体等。 函数原型: ⚫src: 输入原

    2023年04月11日
    浏览(39)
  • 【计算机二级考试C语言】C预处理器

    C 预处理器 不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。 所有的预处理器命令都是以井号(#)开头。

    2024年01月23日
    浏览(45)
  • 图像预处理技术与算法

    图像预处理是计算机视觉和图像处理中非常关键的第一步,其目的是为了提高后续算法对原始图像的识别、分析和理解能力。以下是一些主要的图像预处理技术: 1.图像增强: 对比度调整:通过直方图均衡化(Histogram Equalization)等方法改善图像整体或局部的对比度。 伽玛校

    2024年02月20日
    浏览(51)
  • 【第十七届智能车】智能车图像处理(1)-图像预处理

    本博客使用的硬件是逐飞总钻风130°无畸变摄像头,采用的图像分辨率为188*120,主控为CH32V307VCT6,使用DVI接口进行连接。 我们在本次比赛中采用的是头尾车总钻风摄像头+中间车线性CCD的方案。这两个感光部件各有优劣,使用方式和图像处理也大相径庭。这里讨论的是总钻风

    2024年02月08日
    浏览(50)
  • 关于图像分割的预处理 transform

    目录 1. 介绍 2. 关于分割中的 resize 问题 3. 分割的 transform 3.1 随机缩放 RandomResize 3.2 随机水平翻转 RandomHorizontalFlip 3.3 随机竖直翻转 RandomVerticalFlip 3.4 随机裁剪 RandomCrop 3.5 ToTensor 3.6 normalization 3.7 Compose 3.8 中心裁剪 3.9 Resize 缩放 4. 预处理结果可视化 图像分割的预处理不像

    2024年02月04日
    浏览(50)
  • 图像预处理 Tricks【1】:Contours

    轮廓可以简单地理解为连接所有连续点(沿物体边界)的曲线,这些点通常具有相同的颜色或强度。 轮廓在图像分析中具有重要意义,是物体形状分析和对象检测和识别的有用工具,是理解图像语义信息的重要依据。 本文主要介绍了在 opencv 中,一些重要的用于处理物体轮廓

    2024年02月11日
    浏览(46)
  • OpenCV图像预处理常用函数及流程

    在PyCharm终端中,运行如下命令 由于默认使用的为外网资源,下载速度和稳定性较差,具体看网络状态。如下命令为使用清华镜像下载安装相应的包 在终端中运行命令时,Windows10系统可能会存在如下报错:无法加载激活文件,因此在此系统上禁止运行脚本。此情况是因为win

    2024年02月05日
    浏览(51)
  • 【CV学习笔记】图像预处理warpaffine

    在学习图像预处理的时候发现,之前用的图像预处理方法一般为 resize和letter box,这两种方法比较低效,后来在手写AI中接触到了warpaffine,只需要一步就能够对图像进行预处理,同时还能很方便的进行cuda加速,于是便记录下来。 欢迎正在学习或者想学的CV的同学进群一起讨论与

    2023年04月08日
    浏览(48)
  • 【Computer Vision】图像数据预处理详解

    活动地址:[CSDN21天学习挑战赛](https://marketing.csdn.net/p/bdabfb52c5d56532133df2adc1a728fd) 作者简介 :在校大学生一枚,华为云享专家,阿里云星级博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程

    2024年02月06日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包