当前位置: 首页 > 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;深入学习人工智能都是一个极具价值的选择。本文将为大家精心规划一条人工智能学习路线&#…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...