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

第二十九章:Python-mahotas库:图像处理的高效工具

一、mahotas库简介

   mahotas是一个功能强大的Python图像处理库,提供了丰富的图像处理算法和工具,包括图像分割、特征提取、滤波、形态学操作等。它以简洁的API和高效的性能著称,特别适合处理大型图像。资源绑定附上完整资料供读者参考学习!

二、常见操作示例

1. 图像读取与保存

Python示例代码

import mahotas as mh

# 读取图像
image = mh.imread('演示图片4.jpg')

# 保存图像
mh.imsave('output.jpg', image)

运行效果

2. 图像转换为灰度图

Python示例代码

import mahotas as mh
import matplotlib.pyplot as plt

# 读取图像
image = mh.imread('演示图片4.jpg')

# 转换为灰度图像
gray_image = image.mean(2)  # 对于RGB图像,计算每个像素的平均值

# 显示灰度图像
plt.imshow(gray_image, cmap='gray')
plt.title('Gray Image')
plt.axis('off')  # 关闭坐标轴
plt.show()

运行效果

3. 高斯滤波

Python示例代码

import mahotas as mh
import matplotlib.pyplot as plt
import numpy as np

# 读取图像
image = mh.imread('演示图片3.jpg')

# 如果图像是彩色的,将其转换为灰度图像
if len(image.shape) == 3:  # 检查是否为RGB图像
    gray_image = image.mean(2)  # 计算每个像素的平均值
else:
    gray_image = image.copy()

# 应用高斯滤波
sigma = 20  # 高斯滤波的标准差
smoothed_image = mh.gaussian_filter(gray_image, sigma)

# 显示原始图像和滤波后的图像
plt.figure(figsize=(12, 10))

# 显示原始图像
plt.subplot(1, 2, 1)
plt.imshow(gray_image, cmap='gray')
plt.title('原始图像',font='SimHei',fontsize=30)
plt.axis('off')

# 显示滤波后的图像
plt.subplot(1, 2, 2)
plt.imshow(smoothed_image, cmap='gray')
plt.title('高斯滤波图像 (σ={})'.format(sigma),font='SimHei',fontsize=30)
plt.axis('off')

plt.tight_layout()
plt.show()

运行效果

三、高级示例

1. 分水岭算法进行图像分割

Python示例代码

import mahotas as mh
import matplotlib.pyplot as plt
import numpy as np
from skimage.filters import sobel, threshold_otsu  # 修改这里
from skimage import measure

# 读取图像
image = mh.imread('演示图片4.jpg')

# 确保图像是彩色的
if len(image.shape) != 3:
    raise ValueError("图像必须是彩色的")

# 转换为LAB颜色空间并提取亮度通道
lab_image = mh.colors.rgb2lab(image)
L = lab_image[:, :, 0]

# 修改部分:使用skimage的Otsu阈值方法
T = threshold_otsu(L)  # 这里替换为skimage的版本
binary = L > T

# 生成标记(使用连通组件)
labeled_markers, num_regions = measure.label(binary, return_num=True)

# 计算梯度并应用分水岭
gradient = sobel(L)
segmented = mh.cwatershed(gradient, labeled_markers)

# 可视化
plt.figure(figsize=(12, 10))

plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title('原始图片',font='SimHei',fontsize=30)
plt.axis('off')

plt.subplot(1, 2, 2)
plt.imshow(segmented, cmap='nipy_spectral')
plt.title('图像分割',font='SimHei',fontsize=30)
plt.axis('off')

plt.tight_layout()
plt.show()

运行效果

2. HOG特征提取

Python示例代码

# 正确的 HOG 特征提取方法(使用 scikit-image)
from skimage.feature import hog
from skimage import io, color
import matplotlib.pyplot as plt

# 读取图像并转换为灰度
image = io.imread('演示图片5.jpg')
gray_image = color.rgb2gray(image)  # 转换为灰度(0-1 float)

# 计算 HOG 特征
hog_features, hog_image = hog(
    gray_image,
    orientations=9,                # 方向bin数量
    pixels_per_cell=(8, 8),        # 每个cell的像素数
    cells_per_block=(2, 2),        # 每个block的cell数
    visualize=True,                # 返回可视化图像
    channel_axis=None              # 明确指定单通道
)

print("HOG特征维度:", hog_features.shape)

# 可视化结果
plt.figure(figsize=(12, 6))

plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title('原始图像',font='SimHei',fontsize=30)

plt.subplot(1, 2, 2)
plt.imshow(hog_image, cmap='gray')
plt.title('HOG特征提取',font='SimHei',fontsize=30)

plt.show()

运行效果

HOG 参数详解表:

参数类型默认值作用
orientationsint9方向直方图的bin数量
pixels_per_celltuple(8,8)每个cell的像素尺寸
cells_per_blocktuple(2,2)每个block包含的cell数
block_normstr'L2-Hys'标准化方法(可选L1/L2)
visualizeboolFalse是否返回可视化图像
channel_axisint/NoneNone多通道图像指定颜色轴

四、函数参数总结

函数名参数说明
imread读取图像文件,参数为文件路径。
imsave保存图像文件,参数为文件路径和图像数据。
rgb2gray将RGB图像转换为灰度图。
gaussian_filter应用高斯滤波器,参数为图像和标准差。
cwatershed分水岭算法,参数为图像和标记矩阵。
hog提取HOG特征,参数为图像。

五、总结

   mahotas库以其高效的性能和简洁的API,为图像处理提供了强大的支持。无论是基础的图像操作还是高级的特征提取,mahotas都能满足你的需求。希望本文的示例能激发你的动手欲望,快来尝试吧!资源绑定附上完整资料供读者参考学习!

http://www.dtcms.com/a/113522.html

相关文章:

  • 使用 pytest-xdist 进行高效并行自化测试
  • PHP的垃圾回收机制
  • 我的创作历程:从不情愿到主动分享的成长
  • 用北太天元脚本解决了关于双曲线的求离心率对应的参数、等腰三角形条件下的点坐标和向量点积条件下的参数范围
  • 如何判断栈生长的方向
  • SDL显示YUV视频
  • 快速从零部署一个DeepSeek-R1服务
  • NAS原理与技术详解:从基础概念到实践应用
  • 基础知识补充篇:关于数据不可修改
  • 功能测试和性能测试的区别有哪些?
  • 使用Geotools中的原始方法来操作PostGIS空间数据库
  • java高并发------守护线程Daemon Thread
  • Redis数据结构之ZSet
  • P3654 First Step (ファーストステップ)
  • Linux:(五种IO模型)
  • 基于SSM的高校宿舍水电管理系统
  • 0201线性回归-机器学习-人工智能
  • 开篇 - 配置Unlua+VsCode的智能提示、调试以及学习方法
  • 【LeetCode 热题100】23:合并 K 个升序链表(详细解析)(Go语言版)
  • 《UNIX网络编程卷1:套接字联网API》第7章:套接字选项深度解析
  • 如何理解分类(Category)?Kotlin 扩展是何方神圣?C/C++编译器的C/C++扩展
  • 关于 Spring自定义缓存管理器 的详细说明,包含两种实现方式的对比和代码示例,并附表格总结
  • 复古未来主义屏幕辉光像素化显示器反乌托邦效果PS(PSD)设计模板样机 Analog Retro-Futuristic Monitor Effect
  • 多线程代码案例 - 2
  • 高速电路 PCB 设计要点二
  • 【代码模板】如何用FILE操作符打开文件?fopen、fclose
  • KUKA机器人软件WorkVisual更改语言方法
  • Springboot定时任务开发
  • Java 大视界 -- Java 大数据在智能医疗远程护理与患者健康管理中的应用与前景(175)
  • 游戏引擎学习第205天