基于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.mzph.cn/news/209731.shtml

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

相关文章

HttpComponents: 领域对象的设计

1. HTTP协议 1.1 HTTP请求 HTTP请求由请求头、请求体两部分组成&#xff0c;请求头又分为请求行(request line)和普通的请求头组成。通过浏览器的开发者工具&#xff0c;我们能查看请求和响应的详情。 下面是一个HTTP请求发送的完整内容。 POST https://track.abc.com/v4/tr…

根据对数器找规律、根据数据量猜题目解法

题目一 小虎去买苹果&#xff0c;商店只提供两种类型的塑料袋&#xff0c;每种类型都有任意数量。1&#xff09;能装下6个苹果的袋子2&#xff09;能装下8个苹果的袋子小虎可以自由使用两种袋子来装苹果&#xff0c;但是小虎有强迫症&#xff0c;他要求自己使用的袋子数量必须…

python门户网站文件爬取并显示

广西南宁政府门面网站 import requests import os import io import numpy as np from concurrent.futures import ThreadPoolExecutor from bs4 import BeautifulSoup import time import pdfplumber import pandas as pd from docx import Document import docx import win32…

WordCount 源码解析 Mapper,Reducer,Driver

创建包 com.nefu.mapreduce.wordcount &#xff0c;开始编写 Mapper &#xff0c; Reducer &#xff0c; Driver 用户编写的程序分成三个部分&#xff1a; Mapper 、 Reducer 和 Driver 。 &#xff08; 1 &#xff09; Mapper 阶段 ➢ 用户自定义的 Mapper 要继承自己的父…

文件服务器搭建

文件服务器搭建 文件服务器有四个选择&#xff1a; httpd&#xff08;apache&#xff09; 稳定&#xff0c;使用广泛&#xff0c;服务器一般自带&#xff0c;对于开发人员来说强烈推荐。 nginx 稳定高效&#xff0c;使用广泛&#xff0c;linux命令可直接下载&#xff0c;对…

STM32CubeIDE串口空闲中断实现不定长数据接收

STM32F051空闲中断实现串口不定长数据接收 目的编程软件配置串口开中断中断程序运行结果目的 在串口输入不定长数据时,通过串口空闲中断来断帧接收数据。 编程软件 STM32CubeIDE STM32CubeMX配置MCU。通过对端口配置,自动生成程序,减少编程量。 配置串口开中断 配置串口…

redis中序列化问题,value包含全路径类名解析

1. 问题 redis中保存的key-value格式 value直接存入的是实体对象&#xff0c;值中包含全路径类名&#xff0c;在使用Jackson2JsonRedisSerializer和GenericJackson2JsonRedisSerializer解析器时报错 报错内容&#xff1a; com.fasterxml.jackson.databind.exc.InvalidTypeI…

《师兄啊师兄》第二季确认定档!海神扬名,稳健回归!

近日&#xff0c;《师兄啊师兄》第二季的定档海报和PV终于发布&#xff0c;确认将于12月14日上午10点强势回归&#xff01;这部备受瞩目的国漫作品自第一季播出以来&#xff0c;便以其独特的剧情设定和唯美的画风&#xff0c;赢得了广大观众的喜爱。如今&#xff0c;动画第二季…

第一课【习题】给应用添加通知和提醒

构造进度条模板通知&#xff0c;name字段当前需要固定配置为downloadTemplate。 给通知设置分发时间&#xff0c;需要设置showDeliveryTime为false。 OpenHarmony提供后台代理提醒功能&#xff0c;在应用退居后台或退出后&#xff0c;计时和提醒通知功能被系统后台代理接管…

Qt 5.15.2 三维显示功能

Qt 5.15.2 三维显示功能 三维显示效果&#xff1a; .pro项目文件 QT core gui opengl 3dcore 3drender 3dinput 3dextrasgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecated APIs. # In ord…

2023年法国经销商Solu-Watt来访安科瑞-安科瑞 蒋静

2023年4月10日上午9点&#xff0c;法国Solu-Watt公司Matthieu先生一行到安科瑞考察参观工厂的智能化出入库工作站、柔性化仪表生产车间及实验室。自1992年以来&#xff0c;Solu-Watt在电气设备市场中不断发展。能够提供量身定制的安装有线电气解决方案&#xff08;电气柜、接线…

如何用Qt配置git项目并上传Gitee

1.进入到Qt项目文件夹内&#xff0c;打开 “Git Bash Here” 2.初始化&#xff0c;在“Git Bash Here”中输入 git init 3.加入所有文件&#xff0c;在“Git Bash Here”中输入 git add . (需要注意&#xff0c;git add 后面还有一个点) 4.添加备注&#xff0c;git com…

STL源码剖析笔记——哈希表、unordered_set、unordered_map、unordered_mutiset、unordered_mutimap

系列文章目录 STL源码剖析笔记——迭代器 STL源码剖析笔记——vector STL源码剖析笔记——list STL源码剖析笔记——deque、stack&#xff0c;queue STL源码剖析笔记——Binary Heap、priority_queue STL源码剖析笔记——AVL-tree、RB-tree、set、map、mutiset、mutimap STL源…

一套rk3588 rtsp服务器推流的 github 方案及记录 -01

我不生产代码&#xff0c;我只是代码的搬运工&#xff0c;相信我&#xff0c;看完这个文章你的图片一定能变成流媒体推出去。 诉求&#xff1a;使用opencv拉流&#xff0c;转成bgr数据&#xff0c;需要把处理后的数据&#xff08;BGR&#xff09;编码成264&#xff0c;然后推流…

字符串函数strtok

1.调用格式&#xff1a; 2.调用形式&#xff1a;char*strtok(char*p1,const char*p2),其中第二个是由分隔符组成的字符串&#xff0c;第一个为需要分隔的字符串 3.调用目的&#xff1a;将分隔符之间的字符串取出 4.调用时一般将源字符串拷贝后调用&#xff0c;因为此函数会将…

基于Unity3D 低多边形地形模型纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

【工程实践】使用modelscope下载大模型文件

前言 Modelscope&#xff08;魔搭社区&#xff09;是阿里达摩院的一款开源模型平台&#xff0c;里面提供了很多的热门模型供使用体验&#xff0c;其中的模型文件可以通过git clone 快速下载。并且为模型提供了Notebook的快速开发体验&#xff0c;使用阿里云服务&#xff0c;不需…

【优选算法系列】【专题二滑动窗口】第三节.904. 水果成篮和438. 找到字符串中所有字母异位词

文章目录 前言一、水果成篮 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写 1.2.3 题目总结二、找到字符串中所有字母异位词 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写 …

SAP UI5 walkthrough step9 Component Configuration

在之前的章节中&#xff0c;我们已经介绍完了MVC的架构和实现&#xff0c;现在我们来讲一下&#xff0c;SAPUI5的结构 这一步&#xff0c;我们将所有的UI资产从index.html里面独立封装在一个组件里面 这样组件就变得独立&#xff0c;可复用了。这样&#xff0c;无所什么时候我…

队列的实现

学习就像一段长跑&#xff0c;比的不是谁跑得快&#xff0c;而是谁更能坚持&#xff01;&#xff01; 1 队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First O…