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

数字图像处理(16):RGB与HSV互转

        (1)HSV颜色模型:HSV颜色模型,又称为六角锥体模型,以色调(H)、饱和度(S)、亮度(V)为基础,能够更加自然地表现和处理颜色,因而在计算机视觉、图像处理领域得到了广泛应用。

        (2)H表示色调,用来表示颜色的种类。色调是人在视觉上区分颜色的一种方式,类似RGB模型中的红、绿、蓝等基本颜色。色调通常用角度来表示,0°(红)~120°(绿)~240°(蓝)~360°(红色)。

        (3)S表示饱和度,用来表示颜色的纯净度和鲜艳程度。当S=1时,表示颜色是最纯净的、最鲜艳的;当S=0时,颜色变为灰色,表示没有鲜明的色彩。

        (4)V表示亮度,用来表示颜色的明暗程度。当V=1时,表示颜色完全亮丽;当V=0时,表示颜色完全暗淡,即颜色为黑色。

        

        (5)matlab代码实现

% 清空工作区和命令行窗口
clear;
clc;% 读取图像
input_path = 'D:/FPGA/Image processing/8_rgb_hsv/matlab/1_1920x1080.bmp';
input_image = imread(input_path); 
[height, width, ~] = size(input_image);% 检查图像尺寸
if height ~= 1080 || width ~= 1920error('输入图像必须是1920x1080像素!');
end% 创建HSV图像和还原的RGB图像
hsv_image = zeros(height, width, 3);
restored_rgb = zeros(height, width, 3, 'uint8');% RGB转HSV
for y = 1:heightfor x = 1:widthR = double(input_image(y,x,1));G = double(input_image(y,x,2));B = double(input_image(y,x,3));% 归一化到[0,1]r = R/255;g = G/255;b = B/255;Cmax = max([r g b]);Cmin = min([r g b]);delta = Cmax - Cmin;% 计算H (归一化到0-1)if delta == 0H = 0;elseif Cmax == rH = mod(((g-b)/delta), 6)/6;elseif Cmax == gH = ((b-r)/delta + 2)/6;elseH = ((r-g)/delta + 4)/6;end% 确保H为正值if H < 0H = H + 1;end% 计算Sif Cmax == 0S = 0;elseS = delta/Cmax;end% 计算VV = Cmax;% 存储HSV值 (已归一化到0-1)hsv_image(y,x,1) = H;hsv_image(y,x,2) = S;hsv_image(y,x,3) = V;end
end% HSV转回RGB
for y = 1:heightfor x = 1:widthH = hsv_image(y,x,1) * 6; % 转回0-6范围以便计算S = hsv_image(y,x,2);V = hsv_image(y,x,3);C = V * S;X = C * (1 - abs(mod(H, 2) - 1));m = V - C;% 根据H的范围决定RGB值if H >= 0 && H < 1r = C; g = X; b = 0;elseif H >= 1 && H < 2r = X; g = C; b = 0;elseif H >= 2 && H < 3r = 0; g = C; b = X;elseif H >= 3 && H < 4r = 0; g = X; b = C;elseif H >= 4 && H < 5r = X; g = 0; b = C;elser = C; g = 0; b = X;end% 转换回[0,255]范围R = round((r + m) * 255);G = round((g + m) * 255);B = round((b + m) * 255);% 确保值在0-255范围内R = min(max(R, 0), 255);G = min(max(G, 0), 255);B = min(max(B, 0), 255);restored_rgb(y,x,1) = uint8(R);restored_rgb(y,x,2) = uint8(G);restored_rgb(y,x,3) = uint8(B);end
end% 显示原始图像、HSV图像和还原的RGB图像
figure('Name', 'Image Comparison');subplot(1,3,1);
imshow(input_image);
title('Original RGB Image');subplot(1,3,2);
imshow(hsv_image);  % 现在可以直接显示,因为值已经在0-1范围内
title('HSV Image');subplot(1,3,3);
imshow(restored_rgb);
title('Restored RGB Image');% 获取输入文件的目录路径
[filepath,~,~] = fileparts(input_path);% 在相同目录下保存输出图像
imwrite(hsv_image, fullfile(filepath, 'output_hsv.bmp'));
imwrite(restored_rgb, fullfile(filepath, 'output_restored_rgb.bmp'));% 打开输出文件
output_path = fullfile(filepath, 'output.txt');
fidc = fopen(output_path, 'wb');% 将HSV数据写入文本文件
for y = 1:heightfor x = 1:width% 将0-1范围的HSV值转换为适合FPGA处理的定点数格式% 假设FPGA使用8位精度:% H: 0-1 转换为 0-255% S: 0-1 转换为 0-255% V: 0-1 转换为 0-255H = uint8(hsv_image(y,x,1) * 255);S = uint8(hsv_image(y,x,2) * 255);V = uint8(hsv_image(y,x,3) * 255);% 按HSV顺序写入三个字节fwrite(fidc, [H S V], 'uint8');end
end% 关闭文件
fclose(fidc);fprintf('已生成output.txt文件\n');

(6)FPGA实现(RGB转HSV)

由于H(色调)本来应该0°~360°,如今映射到了0~255,会有所损失。

(7)FPGA实现(HSV转RGB)

        中间变量的精度真的很重要!!!

相关文章:

数字图像处理(16):RGB与HSV互转

&#xff08;1&#xff09;HSV颜色模型&#xff1a;HSV颜色模型&#xff0c;又称为六角锥体模型&#xff0c;以色调&#xff08;H&#xff09;、饱和度&#xff08;S&#xff09;、亮度&#xff08;V&#xff09;为基础&#xff0c;能够更加自然地表现和处理颜色&#xff0c;因…...

web组态可视化编辑器

随着工业智能制造的发展&#xff0c;工业企业对设备可视化、远程运维的需求日趋强烈&#xff0c;传统的单机版组态软件已经不能满足越来越复杂的控制需求&#xff0c;那么实现web组态可视化界面成为了主要的技术路径。 行业痛点 对于软件服务商来说&#xff0c;将单机版软件转…...

数组 - 八皇后 - 困难

************* C topic: 面试题 08.12. 八皇后 - 力扣&#xff08;LeetCode&#xff09; ************* Good morning, gays, Fridary angin and try the hard to celebrate. Inspect the topic: This topic I can understand it in a second. And I do rethink a movie, …...

【分布式】Redis分布式缓存

一、什么是Redis分布式缓存 Redis分布式缓存是指使用Redis作为缓存系统来存储和管理数据的分布式方案。在分布式系统中&#xff0c;多台服务器共同对外提供服务&#xff0c;为了提高系统的性能和可扩展性&#xff0c;通常会引入缓存来减轻数据库的压力。Redis作为一种高性能的…...

Ubuntu——extrepo添加部分外部软件源

extrepo 是一个用于 Ubuntu 和其他基于 Debian 的系统的工具&#xff0c;它的主要作用是简化和管理外部软件源&#xff08;repositories&#xff09;的添加和更新。通过使用 extrepo&#xff0c;用户可以方便地添加、删除和管理第三方软件源&#xff0c;而不需要手动编辑源列表…...

评估大语言模型(LLM)在分子预测任务能够理解分子几何形状性能

摘要 论文地址&#xff1a;https://arxiv.org/pdf/2403.05075 近年来&#xff0c;机器学习模型在各个领域越来越受欢迎。学术界和工业界都投入了大量精力来提高机器学习的效率&#xff0c;以期实现人工通用智能&#xff08;AGI&#xff09;。其中&#xff0c;大规模语言模型&a…...

如何查看电脑刷新率

Windows 系统 通过显示设置查看&#xff1a; 右键点击桌面空白处&#xff0c;选择 “显示设置”。在打开的窗口中&#xff0c;找到 “高级显示设置”。点击 “显示适配器属性”。在弹出的窗口中&#xff0c;选择 “监视器” 选项卡&#xff0c;即可看到当前的屏幕刷新率。使用 …...

mysql集群MHA方式部署

1. 基本信息 部署机器角色部署路径192.168.242.71MySQL-Mater MHA-NodeMySQL: /alidata1/mysql-8.0.28192.168.242.72MySQL-Slave MHA-NodeMHA-Node: /alidata1/admin/tools/mha4mysql-node-0.58192.168.242.73MySQL-Slave MHA-Node192.168.242.74MHA-ManagerMHA-Manager: …...

第十七章 使用 MariaDB 数据库管理系统

1. 数据库管理系统 数据库是指按照某些特定结构来存储数据资料的数据仓库。在当今这个大数据技术迅速崛起的年代&#xff0c;互联网上每天都会生成海量的数据信息&#xff0c;数据库技术也从最初只能存储简单的表格数据的单一集中存储模式&#xff0c;发展到了现如今存储海量…...

rabbitmq 安装延时队列插件rabbitmq_delayer_message_exchange(linux centOS 7)

1.插件版本 插件地址&#xff1a;Community Plugins | RabbitMQ rabbitmq插件需要对应的版本&#xff0c;根据插件地址找到插件 rabbitmq_delayer_message_exchange 点击Releases 因为我rabbitmq客户端显示的版本是&#xff1a; 所以我选择插件版本是&#xff1a; 下载 .ez文…...

Unity性能优化---动态网格组合(一)

网格组合是将 Unity 中的多个对象组合为一个对象的技术。因此&#xff0c;在多物体的场景中&#xff0c;使用网格组合&#xff0c;会有效的减少小网格的数量&#xff0c;最终将得到一个包含许多小网格的大网格游戏对象&#xff0c;这将提高游戏或模拟器的性能。在Unity 的 “St…...

Appium:安装uiautomator2失败

目录 1、通过nmp安装uiautomator2&#xff1a;失败 2、通过 Appium 的平台直接安装驱动程序 3、通过pip 来安装 uiautomator2 1、通过nmp安装uiautomator2&#xff1a;失败 我先是通过npm安装的uiautomator2&#xff0c;也显示已经安装成功了&#xff1a; npm install -g …...

电子信息工程自动化 单片机彩灯控制

摘要 随着社会经济和科学技术的不断进步&#xff0c;人们在保持发展的同时&#xff0c;环境带给人类的影响已经不足以让我们忽视&#xff0c;所以城市的美化问题慢慢的进入了人们的眼帘&#xff0c;PLC的产生给带电子产品带来了巨大变革&#xff0c;彩灯的使用在城市的美化中变…...

word poi-tl 表格功能增强,实现表格功能垂直合并

目录 问题解决问题poi-tl介绍 功能实现引入依赖模版代码效果图 附加&#xff08;插件实现&#xff09;MergeColumnData 对象MergeGroupData 类ServerMergeTableData 数据信息ServerMergeTablePolicy 合并插件 问题 由于在开发功能需求中&#xff0c;word文档需要垂直合并表格&…...

LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型 Matlab代码注释清晰。 程序设计 完整程序和数据获取方式&#xff1a;私信博主回复LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型&#xff08;Matlab&#…...

《鸿蒙开发-答案之书》 怎么设置Json字段的别名

《鸿蒙开发-答案之书》 怎么设置Json字段的别名 Android设置别名用的是SerializedName(“msg”)&#xff0c;那鸿蒙用的是啥&#xff0c;有点懵不知道。 鸿蒙得引入第三方库&#xff1a;ohpm install class-transformer 然后用Expose({ name: ‘first-name’ }) 示例代码&…...

ftp服务器搭建-安装、配置及验证

ftp服务器搭建-安装、配置及验证 #安装 sudo apt-get install vsftpd #配置文件 cat > /etc/vsftpd.conf << "EOF" listenNO listen_ipv6YES anonymous_enableNO local_enableYES write_enableYES dirmessage_enableYES use_localtimeYES xferlog_enable…...

鸿蒙应用获取wifi连接的ip地址(官方文档获取的格式转换成192.168.1.xxx格式)

目录 一.背景 二.官网流程 wifiManager.getLinkedInfo9+ 三.转换成192.168.xxx.xxx格式 一.背景 本次来学习如何获取到鸿蒙设备连接wifi后的ip地址,由于官网文档中获取的ip地址和我们平时看到的192:168:xxx:xxx有所不同,需要进行下转换,所以记录下,如下的流程是在OpenH…...

c++数据结构算法复习基础--11--高级排序算法-快速排序-归并排序-堆排序

高阶排序 1、快速排序 冒泡排序的升级算法 每次选择一个基准数&#xff0c;把小于基准数的放到基准数的左边&#xff0c;把大于基准数的放到基准数的右边&#xff0c;采用 “ 分治算法 ”处理剩余元素&#xff0c;直到整个序列变为有序序列。 最好和平均的复杂度&#xff1a…...

人工智能学习路线详细规划

一、引言 在当今科技飞速发展的时代&#xff0c;人工智能已成为引领未来的关键技术之一。无论是为了追求职业发展的新机遇&#xff0c;还是出于对这一前沿领域的浓厚兴趣&#xff0c;深入学习人工智能都是一个极具价值的选择。本文将为大家精心规划一条人工智能学习路线&#…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...