博客
关于我
图像处理系列1.skimage
阅读量:372 次
发布时间:2019-03-05

本文共 2139 字,大约阅读时间需要 7 分钟。

图像基础

黑白图像通常用二维矩阵表示,而灰度图像则使用0-1之间的数值表示。对于彩色图像,常用的表示方法是RGB或BGR三通道,数值范围在0-255之间。无论是RGB还是BGR,图像的维度都是高度×宽度×通道数(H×W×C)。在深度学习中,由于需要对各通道分别进行卷积运算,因此通道维度通常排在前面,表达为C×H×W。通过numpy的transpose函数可以轻松将图像转换为适合深度学习的格式。

在Python中,常用的数字图像处理库包括PIL/Pillow、OpenCV和scikit-image。PIL和Pillow功能相对基础,适合简单的图像处理需求;而OpenCV是一个功能强大的C++库,仅为Python提供了接口。相比之下,scikit-image基于scipy开发,专门将图像处理功能转化为numpy数组操作,使用起来更加简便。

scikit-image功能模块

scikit-image是一个功能丰富的图像处理库,其主要模块包括: - **io模块**:用于读取和写取图像。 - **data模块**:提供了一些示例图像,方便开发和测试。 - **transform模块**:包含图像变形功能,如缩放、旋转等。 - **exposure模块**:处理亮度和对比度问题。 - **filters模块**:提供多种滤波器,支持高通、低通滤波、边缘检测等操作。 - **morphology模块**:实现形态学操作,如膨胀、腐蚀等。 - **rank模块**:高级滤波和图像增强功能。 - **measure模块**:用于图像测量和分析。

2.1 io模块:读写功能

- **imread**:读取图像文件,返回3维numpy数组。灰度图像可设为as_grey=True,得到2维数组。 - **imshow**:将numpy数组显示为RGB格式的图像。 - **imsave**:保存图像文件。 - **ImageCollection**:批量读取并处理多张图片。 - **concatenate_images**:将多张图像数组合成一个更高维的数组。

2.2 data模块:示例图片

scikit-image内置了一些示例图片,开发者可以直接使用这些数据集进行测试和开发。例如,data.coffee()返回一张咖啡杯的图片数组。

2.3 transform模块:图像变形

- **resize**:调整图像大小。 - **rescale**:缩放图像。 - **pyramid_gaussian**:高斯金字塔变换。 - **rotate**:旋转图像。

2.4 exposure模块:亮度和对比度

- **adjust_gamma**:调整对比度。 - **adjust_log**:对数调整。 - **rescale_intensity**:调整亮度范围。 - **histogram**:直方图分析。 - **equalize_hist**:直方图均衡化。

2.5 filters模块:滤波器

- **高通滤波器**:用于边缘检测。 - **低通滤波器**:平滑图像,去噪。 - **边缘检测**:支持Sobel、Roberts、Scharr、Prewitt和Gabor滤波器。Canny算子在feature中特别有效。 - **平滑滤波**:GaussianFilter支持不同模糊效果。 - **阈值分割**:OTSU、Yen、LI和自适应阈值分割。

2.6 morphology模块:形态学操作

- **dilation**:图像膨胀。 - **erosion**:图像腐蚀。 - **opening**:先腐蚀再膨胀,用于去除小孔洞。 - **closing**:填充孔洞。 - **white-tophat**:保留图像中的小斑点。 - **black-tophat**:保留图像中的孔洞。 - **convex_hull_image**:计算图像凸包。

2.7 rank模块:高级滤波

- **autolevel**:自动对比度。 - **bottomhat**:下凸滤波。 - **tophat**:上凸滤波。 - **enhance_contrast**:增强对比度。 - **entropy**:熵值分析。 - **equalize**:均衡化。 - **gradient**:梯度计算。

2.8 measure模块:图像测量

- **label**:图像分割。 - **regionprops**:分析连通区域。 - **remove_small_objects**:去除小物体。

常用组合

边缘检测通常需要先进行模糊处理。例如: - **blur**:简单的算术平均模糊。 - **medianBlur**:适合数字化视频去噪。 - **GaussianBlur**:高斯滤波去噪后再进行边缘检测。 - **Laplacian**:双导数滤波器,产生明显的边缘线条。 - **Sobel**和**Scharr**滤波器:计算水平和垂直方向的梯度。 - **Canny算子**:结合高斯滤波、非最大抑制和双阈值去噪,得到更准确的边缘。

转载地址:http://umiwz.baihongyu.com/

你可能感兴趣的文章
android自定义无边框无标题的DialogFragment替代dialog
查看>>
获取android的所有挂载路径(转)
查看>>
记录一下写的一个java生成不带重复数的随机数组(算法没有详细设计,只实现功能)
查看>>
androidstudio同步的时候下载jcenter的库出错解决办法
查看>>
ButterKnife使用问题
查看>>
React学习笔记(一)
查看>>
低代码平台快速开发小程序
查看>>
vue学习笔记
查看>>
低代码后续发展路线图
查看>>
MobX 学习 - 04 TodoList 案例
查看>>
MobX 学习 - 06 异步任务、rootStore、数据监测
查看>>
react: antd 中 table 排序问题
查看>>
FPGA学习网站推荐
查看>>
oracle 翻译ip归属地/经纬度/定位;获取ip归属地/经纬度/定位;获取ip gps定位/lng,lat/坐标
查看>>
LeetCode:面试题46. 把数字翻译成字符串(C语言)
查看>>
LeetCode:面试题 10.01. Sorted Merge LCCI合并排序的数组(C语言)
查看>>
LeetCode:100. Same Tree相同的树(C语言)
查看>>
【个人网站搭建】GitHub pages+hexo框架下为next主题添加分类及标签
查看>>
GDB命令—jump/return/call/disassemble
查看>>
java基础--继承
查看>>