基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序

2023-11-10 02:28

本文主要是介绍基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.算法运行效果图预览

2.算法运行软件版本

3.部分核心程序

4.算法理论概述

4.1. RGB与HSV色彩空间

4.2. RGB到HSV转换原理

5.算法完整程序工程


1.算法运行效果图预览

将FPGA的仿真结果导入到matlab中:

2.算法运行软件版本

vivado2019.2

matlab2022a

3.部分核心程序

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/08/01  
// Design Name: 
// Module Name: RGB2gray
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module test_image;reg i_clk;
reg i_rst;
reg [7:0] Rbuff [0:100000];
reg [7:0] Gbuff [0:100000];
reg [7:0] Bbuff [0:100000];
reg [7:0] i_Ir,i_Ig,i_Ib;
wire [7:0] o_H,o_S,o_V;
integer fids1,dat1,fids2,dat2,fids3,dat3,jj=0;//D:\FPGA_Proj\FPGAtest\codepz
initial 
beginfids1 = $fopen("D:\\FPGA_Proj\\FPGAtest\\codepz\\R.bmp","rb");dat1  = $fread(Rbuff,fids1);$fclose(fids1);
endinitial 
beginfids2 = $fopen("D:\\FPGA_Proj\\FPGAtest\\codepz\\G.bmp","rb");dat2  = $fread(Gbuff,fids2);$fclose(fids2);
endinitial 
beginfids3 = $fopen("D:\\FPGA_Proj\\FPGAtest\\codepz\\B.bmp","rb");dat3 = $fread(Bbuff,fids3);$fclose(fids3);
endinitial 
begin
i_clk=1;
i_rst=1;
#1200;
i_rst=0;
end always #5  i_clk=~i_clk;always@(posedge i_clk) 
begini_Ir<=Rbuff[jj];i_Ig<=Gbuff[jj];i_Ib<=Bbuff[jj];jj<=jj+1;
endmain_RGB2HSV main_RGB2HSV_u(
.i_clk    (i_clk),
.i_rst    (i_rst),
.i_image_R      (i_Ir),
.i_image_G      (i_Ig),
.i_image_B      (i_Ib),
.o_H            (o_H),// Y 
.o_S            (o_S),// Y 
.o_V            (o_V)
);integer fout1;
initial beginfout1 = $fopen("H.txt","w");
endalways @ (posedge i_clk)beginif(jj<=66616)$fwrite(fout1,"%d\n",o_H);else$fwrite(fout1,"%d\n",0);
endinteger fout2;
initial beginfout2 = $fopen("S.txt","w");
endalways @ (posedge i_clk)beginif(jj<=66616)$fwrite(fout2,"%d\n",o_S);else$fwrite(fout2,"%d\n",0);
endinteger fout3;
initial beginfout3 = $fopen("V.txt","w");
endalways @ (posedge i_clk)beginif(jj<=66616)$fwrite(fout3,"%d\n",o_V);else$fwrite(fout3,"%d\n",0);
endendmodule
0X_022m

4.算法理论概述

        在数字图像处理中,色彩空间的转换是常见的操作。其中,RGB和HSV是两种经常使用的色彩空间。RGB基于红、绿、蓝三种颜色的组合,而HSV则代表色相、饱和度和明度。本文将探讨如何基于FPGA实现RGB到HSV的转换,并深入讨论其背后的原理和数学公式。

4.1. RGB与HSV色彩空间

       RGB色彩空间:RGB色彩模型采用三维笛卡尔坐标系统,红、绿、蓝三原色位于三个角上。原色值位于坐标轴上的点,而其他颜色则位于立方体内部。通过三原色的不同强度组合,可以得到各种颜色。 RGB是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和,越混合亮度越高,即加法混合。红、绿、蓝三个颜色通道每种色各分为256阶亮度,在0时“灯”最弱——是关掉的,而在255时“灯”最亮。当三色灰度数值相同时,产生不同灰度值的灰色调,即三色灰度都为0时,是最暗的黑色调;三色灰度都为255时,是最亮的白色调。在电脑中,RGB的所谓“多少”就是指亮度,并使用整数来表示。通常情况下,RGB各有256级亮度,用数字表示为从0、1、2...直到255。注意虽然数字最高是255,但0也是数值之一,因此共256级。

       HSV色彩空间:HSV色彩空间更加接近人类视觉对色彩的感知。其中,H(Hue)代表色相,表示颜色的基本属性;S(Saturation)代表饱和度,表示颜色的深浅;V(Value)代表明度,表示颜色的明亮程度。

       HSV是一种比较直观的颜色模型,所以在许多图像编辑工具中应用比较广泛,这个模型中颜色的参数分别是:色调(H, Hue),饱和度(S,Saturation),明度(V, Value)。

色调H

        用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;

饱和度S

        饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

明度V

        明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

4.2. RGB到HSV转换原理

RGB到HSV的转换涉及以下步骤:

首先将RGB值标准化到[0,1]范围。对于8位的RGB值,可以通过除以255来完成这一步。

然后计算色相H,饱和度S,明度V

5.算法完整程序工程

OOOOO

OOO

O

这篇关于基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/379865

相关文章

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.