基于HSV空间色彩的图像分割方法(含python代码实现)

文章目录

  • 1. 介绍
  • 2. HSV颜色空间
  • 3. python实现HSV图像分割
    • 3.1. 代码实现
    • 3.2. 运行结果


1. 介绍

HSV颜色系统简介:
HSV 即使用色相(Hue)、饱和度(Saturation)、明度(Value)来表示色彩的一种方式。是一种在人们生活中常用的颜色系统,因为它符合人们描述颜色的方式——是什么颜色、颜色有多深、颜色有多亮

(1) H H H(色相,Hue):将颜色用0°~360°来表示,常见的色相与数值按照下表对应:

绿青色蓝色品红
60°120°180°240°300°360°

图形可视化:

在这里插入图片描述

(2) S S S(饱和度,saturation):是指色彩的纯度,也可以理解为色彩的深浅度。对于同种色彩下饱和度越低则颜色越黯淡,并且有s∈[0,1)

在这里插入图片描述

(3) V V V(明度,value):即颜色的明暗程度。数值越高越接近白色,数值越低越接近黑色且V∈[0,1)

在这里插入图片描述

2. HSV颜色空间

    HSV颜色空间的模型对应于圆柱坐标系中的一个圆锥形子集
    圆锥的顶面:对应于 V = 1 V=1 V=1。 它包含RGB模型中的 R = 1 , G = 1 , B = 1 R=1,G=1,B=1 R=1,G=1,B=1 三个面,所代表的颜色较亮。
    色彩 H H H 由绕V轴(圆锥的中轴)的旋转角给定。红色对应于角度0° ,绿色对应于角度120°,蓝色对应于角度240°。在HSV颜色模型中,每一种颜色和它的补色相差180° 。
    饱和度 S S S:取值从0到1,所以圆锥顶面的半径为1。
    圆锥的顶点(即原点): V = 0 V=0 V=0 H H H S S S 无定义, 代表黑色。
    圆锥的顶面中心 S = 0 , V = 1 S=0,V=1 S=0,V=1 H H H无定义,代表白色。从该点到原点代表亮度渐暗的灰色,即具有不同灰度的灰色。对于这些点, S = 0 S=0 S=0 H H H的值无定义。
    在圆锥顶面的圆周上的颜色,V=1,S=1,这种颜色是纯色。

在这里插入图片描述

3. python实现HSV图像分割

这里我采用的是IDRiD数据集中的一张图片,目的是想试一下HSV在硬渗出物分割的表现:

在这里插入图片描述

3.1. 代码实现

from skimage.io import imread, imshow
from skimage import img_as_ubyte  # For converting the float image to uint8
from skimage import io, color
from skimage.color import rgb2hsv
from matplotlib import pyplot as plt
import numpy as npimage_path = "img.jpg"
rgb_image = io.imread(image_path)img_hsv = rgb2hsv(rgb_image)
# -------------转换成HSV色彩空间----------------
fig, ax = plt.subplots(1, 3, figsize=(12,4))
ax[0].imshow(img_hsv[:,:,0], cmap='gray')
ax[0].set_title('Hue')
ax[1].imshow(img_hsv[:,:,1], cmap='gray')
ax[1].set_title('Saturation')
ax[2].imshow(img_hsv[:,:,2], cmap='gray')
ax[2].set_title('Value')
plt.show()
# --------------获得每个HSV通道的强度值---------------
fig2, ax2 = plt.subplots(1, 3, figsize=(20, 5))
ax2[0].imshow(img_hsv[:,:,0],cmap='hsv')
ax2[0].set_title('hue')
ax2[1].imshow(img_hsv[:,:,1],cmap='hsv')
ax2[1].set_title('transparency')
ax2[2].imshow(img_hsv[:,:,2],cmap='hsv')
ax2[2].set_title('value')# 显示colorbar,下面会用到colorbar设定阈值范围
fig2.colorbar(imshow(img_hsv[:,:,0],cmap='hsv'))
# fig2.colorbar(imshow(img_hsv[:,:,1],cmap='hsv'))
# fig2.colorbar(imshow(img_hsv[:,:,2],cmap='hsv'))fig2.tight_layout()
plt.show()
# -------------根据colorbar挑选阈值----------------
# 设定hue的阈值范围(色彩范围):(0.07, 0.22)
lower_mask = img_hsv[:, :, 0] > 0.07
upper_mask = img_hsv[:, :, 0] < 0.22
# 设定saturation的阈值范围(透明度范围):(0.78, 1)
# 注:如果有上下界就类似上面hue阈值的设置,一个最高值一个最低值
saturation_mask = img_hsv[:, :, 1] > 0.78
# 设定value的阈值范围(亮度范围):(0.7, 1)
value_mask = img_hsv[:, :, 2] > 0.7mask = upper_mask * lower_mask * saturation_mask * value_maskred = rgb_image[:, :, 0] * mask
green = rgb_image[:, :, 1] * mask
blue = rgb_image[:, :, 2] * mask
img_masked = np.dstack((red, green, blue))imshow(img_masked)
plt.show()# Save the masked image as PNG
# io.imsave("img_masked.png", img_as_ubyte(img_masked))

3.2. 运行结果

(1)以 gray模式 显示 Hue、Saturation、Value 三个通道
在这里插入图片描述

(2)以 hsv模式 显示 Hue、Saturation、Value 三个通道

在这里插入图片描述

(3)分割结果图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/213266.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

贝锐花生壳3大安全能力,保障网络服务安全远程连接

在没有公网IP的情况下&#xff0c;使用内网穿透工具&#xff0c;将本地局域网服务映射至外网&#xff0c;虽然高效快捷&#xff0c;但信息安全也是不可忽略的方面。 对此&#xff0c;贝锐花生壳提供了多维度的安全防护能力&#xff0c;满足不同场景下用户安全远程访问内网服务的…

uniapp 数组添加不重复元素

一、效果图 二、代码 //点击事件rightBtn(sub, index) {console.log(sub, index)//uniapp 数组添加不重复元素if (this.selectList.includes(sub.type)) {this.selectList this.selectList.filter((item) > {return item ! sub.type;});} else {this.selectList.push(sub.t…

cache 2.单机并发缓存

0.对原教程的一些见解 个人认为原教程中两点知识的引入不够友好。 首先是只读数据结构 ByteView 的引入使用是有点迷茫的&#xff0c;可能不能很好理解为什么需要ByteView。 第二是主体结构 Group的引入也疑惑。其实要是熟悉groupcache&#xff0c;那对结构Group的使用是清晰…

销售技巧培训之如何提高手机销售技巧

销售技巧培训之如何提高手机销售技巧 随着科技的迅速发展&#xff0c;手机已成为我们日常生活中不可或缺的一部分。作为一名手机销售员&#xff0c;了解手机销售技巧是必不可少的。本文将通过案例分析与实践&#xff0c;为你揭示手机销售的奥秘。 一、了解客户需求 在销售过程…

CRM系统选择技巧,什么样的CRM系统好用?

SaaS行业发展迅速&#xff0c;更多的企业逐渐选择CRM管理系统。打开搜索引擎&#xff0c;有非常多的结果。怎样在数十万个搜索结果中选择适合您的CRM系统&#xff1f;下面我们将聊聊&#xff0c;怎样选择CRM系统。 第一步&#xff1a;明确自身需求 重要性&#xff1a;每家企业…

【Java Web学习笔记】5 - XML

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/xml 零、在线文档 XML系列教程 一、XML引出 1.为什么需要XML 1.需求1 :两个程序间进行数据通信? 2.需求2:给一台服务器&#xff0c;做一个配置文件&#xff0c;当服务器程序启动时&#xff0c;去…

JUnit 之初体验

文章目录 1.定义2.引入1&#xff09;使用 Maven 工具2&#xff09;使用 Gradle 工具3&#xff09;使用 Jar 包 2.样例0&#xff09;前提1&#xff09;测试类2&#xff09;测试方法3&#xff09;测试断言4&#xff09;实施 总结 1.定义 JUnit 是一个流行的 Java 单元测试框架&a…

初识 pytest 及断言使用

章节目录&#xff1a; 一、pytest 相关概述二、环境搭建三、使用前提四、断言4.1 常用断言4.2 异常断言4.3 断言装饰器 五、结束语 一、pytest 相关概述 pytest 是一个基于 Python 编写的测试框架&#xff0c;用于编写和运行各种类型的软件测试。它提供了丰富的功能和灵活的语法…

Vue:绘制图例

本文记录使用Vue框架绘制图例的代码片段。 可以嵌入到cesium视图中,也可以直接绘制到自己的原生系统中。 一、绘制图例Vue组件 <div v-for="(color, index) in colors" :key="index" class="legend-item"><div class="color-…

机器学习中的特征工程

1 特征工程概述 特征工程是机器学习中的一个关键步骤&#xff0c;在机器学习领域中占有非常重要的地位&#xff0c;是机器学习中不可或缺的一部分&#xff0c;下图展示了一个常规的机器学习流程&#xff1a; 特征工程涉及从原始数据中提取、选择和转换特征&#xff0c;以改善模…

计算机网络TCP篇②

来源自小林Coding博客&#xff0c;阅读后部分精简笔记 目录 一、TCP 重传、滑动窗口、流量控制、拥塞控制 1.1、重传机制 1.1.1、超时重传 1.1.2、快速重传 1.1.3、SACK 方法 1.1.4、Duplicate SACK 1.2、滑动窗口 1.3、流量控制 1.3.1、操作系统缓冲区与滑动窗口的关…

13、pytest为失败的断言定义自己的解释

官方实例 # content of ocnftest.py from test_foocompare import Foodef pytest_assertrepr_compare(op, left, right):if isinstance(left, Foo) and isinstance(right, Foo) and op "":return["Comparing Foo instances:",f" vals:{left.val} !…

【数据结构第 6 章 ②】- 图的存储结构(详解邻接矩阵)- 用 C 语言实现

目录 一、邻接矩阵表示法 二、AMGraph.h 三、AMGraph.c 四、Test.c 【数据结构第 6 章 ① 】- 图的定义和基本术语-CSDN博客 由于图的结构比较复杂&#xff0c;任意两个顶点之间都可能存在联系&#xff0c;因此无法以数据元素在存储区中的物理位置来表示元素之间的关系&…

Leetcode2477. 到达首都的最少油耗

Every day a Leetcode 题目来源&#xff1a;2477. 到达首都的最少油耗 解法1&#xff1a;贪心 深度优先搜索 题目等价于给出了一棵以节点 0 为根结点的树&#xff0c;并且初始树上的每一个节点上都有一个人&#xff0c;现在所有人都需要通过「车子」向结点 0 移动。 对于…

微软NativeApi-NtQuerySystemInformation

微软有一个比较实用的Native接口&#xff1a;NtQuerySystemInformation&#xff0c;具体可以参考微软msdn官方文档&#xff1a;NtQuerySystemInformation&#xff0c; 是一个系统函数&#xff0c;用于收集特定于所提供的指定种类的系统信息。ProcessHacker等工具使用NtQuerySys…

C/C++,优化算法——双离子推销员问题(Bitonic Travelling Salesman Problem)的计算方法与源代码

1 文本格式 // C program for the above approach #include <bits/stdc.h> using namespace std; // Size of the array a[] const int mxN 1005; // Structure to store the x and // y coordinates of a point struct Coordinates { double x, y; } a[mxN]; //…

luceda ipkiss教程 43:画渐变圆弧型波导

案例分享&#xff1a; from si_fab import all as pdk import ipkiss3.all as i3 from ipcore.properties.restrictions import RestrictTuple from ipkiss.geometry.shapes.modifiers import __ShapePathBase__ import numpy as np from math import atan2class ShapePathTa…

优化 SQL 日志记录的方法

为什么 SQL 日志记录是必不可少的 SQL 日志记录在数据库安全和审计中起着至关重要的作用&#xff0c;它涉及跟踪在数据库上执行的所有 SQL 语句&#xff0c;从而实现审计、故障排除和取证分析。SQL 日志记录可以提供有关数据库如何访问和使用的宝贵见解&#xff0c;使其成为确…

Kubersphere应用【二】Docker安装

一、Docker安装 1.下载Docker安装包 【地址】Index of linux/static/stable/x86_64/ 2.上传至服务器 # 解压文件 tar -xvf docker-20.10.10.tgz# 将docker 目录中的所有文件复制至/usr/bin/目录下 cp docker/* /usr/bin 3.配置docker.service文件 vim /usr/lib/systemd/sy…

MacBook 逆水寒下载安装使用教程,支持最新版本 MacOS 流畅不闪退

最近 MacBook 系统更新到了 MacOS 14.1 很多朋友的逆水寒玩不了了&#xff0c;我尝试了一番可以正常玩了&#xff0c;看图&#xff1a; 其实操作也很简单&#xff0c;我们从头开始&#xff0c;因为 MacOS 系统的更新所以我们也需要更新新版本的 playCover 来适配新的系统&#…