在1911年一份报纸上讨论新闻和宣传并引用报纸编辑Tess Flanders的文章中,出现了以下表达:
使用图片。 值一千个字。
类似的短语也出现在1913年的Piqua汽车供应公司的报纸广告中:
一看值得一千个字。
我不会深入探讨历史问题。 简介只是为了使其有趣一点,并说明这些短语如何使我们了解图片的重要性,以及它们如何真正在其中嵌入很多信息。 我敢肯定,我们大多数人都会意识到这一点,尤其是当我们注意到图片不仅可以留在纯文本上,而且还能留在我们的脑海中时。
因此,毫无疑问,图片在我们的沟通中扮演着重要的角色,不仅是普通图片,而且还包括医学图像(例如MRI,超声等)之类的专业照片。
我们可以通过不同的采集设备获取照片。 例如,使用皮肤镜检索黑色素瘤(皮肤癌)图像。 我们使用数码相机或智能手机为自己或朋友拍照。 但是,有时我们会在图片中发现一些问题,例如模糊,这可能是由于所使用的采集设备引起的。
但是,在这种情况下该怎么办? 您已经收到了一些医学图像进行分析,而您别无选择,无法重新获取这些图像。 即使重新拍摄图像,您看到的分辨率也不会改变,也不会遇到任何其他问题。 在这种情况下, 图像处理将发挥作用。
我喜欢在牛津词典中如何定义图像处理一词:
分析和处理数字化图像,特别是为了提高其质量。
这里的“数字化图像”是指图像被认为是数字的 ,即它是由计算机处理的。
在此游戏中使用计算机意味着要使用编程语言。 在本教程中,我将向您展示如何使用Python编程语言对图像执行图像处理任务。
scikit图像
我们将用于执行图像处理任务的库是scikit-image
。 根据论文scikit-image:Python中的图像处理 :
scikit-image是一个图像处理库,可实现用于研究,教育和行业应用的算法和实用程序。 它是根据开放的Modified BSD开源许可证发行的,以Python编程语言提供了完善的API,并且是由活跃的国际协作者团队开发的。
我们需要做的第一件事是安装scikit-image
。 安装库的说明可以在下载页面上找到,在本教程中,我将向您展示如何在Mac OS X机器上安装该库,因为这是我在编写本教程时正在使用的内容。
由于scikit-image
是一个外部库,因此我们要做的第一件事就是安装该库。 为此,我将使用pip ,它(基于维基百科):
软件包管理系统,用于安装和管理以Python编写的软件包。 在Python软件包索引(PyPI)中可以找到许多软件包。
您可以按照《 Python打包用户指南》中提到的步骤安装pip
,但是如果您具有Python 2.7.9
和更高版本,或者Python 3.4
和更高版本,则已经具有pip
!
现在可以通过键入以下命令(在Mac OS X的Terminal中)简单地安装scikit-image
:
pip install -U scikit-image
现在,我们已经安装了该库,并准备好进行一些图像处理了!
我们将在本教程中使用的测试图像是baboon.png 。 继续下载它,或者只是使用您选择的图像。 该图像如下所示:
图片尺寸
有时我们需要知道图像的尺寸(有关过滤的更多信息)。 为了检查图像的尺寸,我们可以使用guess_spatial_dimensions()
方法,如下所示:
from skimage import io, color
img = io.imread('baboon.png')
dimensions = color.guess_spatial_dimensions(img)
print dimensions
上面脚本的输出为3
,这意味着我们有一个包含三个空间维度的图像。
颜色到灰度
从上面的部分中,我们已经注意到我们的图像是3D阵列图像(形状为(.., .., 4)
RGBA格式)。 我怎么知道它是RGBA格式? 您可以简单地执行以下操作:
import skimage.io as io
from skimage.color import rgb2gray
img = io.imread('baboon.png')
print img.shape
在这种情况下,您将获得以下输出: (512, 512, 4)
。
在本节中,我们想将原始的彩色baboon.png图像转换为灰度 2D图像(黑白)。 只需使用以下脚本即可完成此操作:
import skimage.io as io
from skimage.color import rgb2gray
img = io.imread('baboon.png')
img_grayscale = rgb2gray(img)
让我们继续并将新图像(灰度)保存到文件中。 可以使用imsave()
函数完成此操作,如下所示(注意,新图像位于文件baboon-gs.png
):
io.imsave('baboon-gs.png',img_grayscale)
要检查图像的尺寸,我们可以使用上一节中的脚本,在这种情况下,您将获得2
。 或者,您可以使用img_grayscale.shape
,结果为512x512
。 因此,我们现在有了一个2D图像。
为了显示新的灰度图像,请在脚本末尾添加以下内容:
show_grayscale = io.imshow(img_grayscale)
io.show()
结果看起来像这样:
将滤镜应用于图像
在图像处理中,执行过滤以对图像进行一些增强。 通常,滤波包含以下操作:边缘增强,锐化和平滑。
在本节中,我将向您展示如何在图像上应用Sobel滤镜 ,并查看执行此操作后的输出结果。 我将使用scikit-image网站首页上显示的示例,但将其应用于我们的图像。
在图像上应用Sobel滤镜的脚本如下所示:
from skimage import data, io, filters
img = io.imread('baboon.png')
edges = filters.sobel(img)
io.imshow(edges)
io.show()
如果您运行脚本,是否注意到任何问题? 是的,由于图像必须是2D图像,因此我们无法应用该操作。 因此, baboon.png
使用baboon.png
,我们还需要使用2D图像baboon-gs.png
。 该操作的输出如下所示:
结论
图像处理操作很多,并且scikit-image
Python库为我们提供了许多我们可以对图像执行的有趣操作。 您可以在scikit-image网站上使用此库查看更多图像处理操作。
无论您是刚刚起步还是想学习新技能的经验丰富的程序员,都可以通过我们完整的python教程指南学习Python。
翻译自: https://code.tutsplus.com/tutorials/image-processing-using-python--cms-25772