首页 > 编程语言 >基于FPGA的图像RGB转HSV实现,包含testbench和MATLAB辅助验证程序

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

时间:2024-01-25 23:47:15浏览次数:24  
标签:颜色 FPGA 明度 RGB HSV testbench 饱和度

1.算法运行效果图预览

 

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

 

 

 

2.算法运行软件版本

vivado2019.2

 

matlab2022a

 

3.算法理论概述

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

 

3.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%(白)。

 

3.2. RGB到HSV转换原理

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

 

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

 

 

 

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

 

 

 

4.部分核心程序

`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 
begin
	fids1 = $fopen("D:\\FPGA_Proj\\FPGAtest\\codepz\\R.bmp","rb");
	dat1  = $fread(Rbuff,fids1);
	$fclose(fids1);
end
 
initial 
begin
	fids2 = $fopen("D:\\FPGA_Proj\\FPGAtest\\codepz\\G.bmp","rb");
	dat2  = $fread(Gbuff,fids2);
	$fclose(fids2);
end
 
initial 
begin
	fids3 = $fopen("D:\\FPGA_Proj\\FPGAtest\\codepz\\B.bmp","rb");
	dat3 = $fread(Bbuff,fids3);
	$fclose(fids3);
end
 
 
 
initial 
begin
i_clk=1;
i_rst=1;
#1200;
i_rst=0;
end 
 
always #5  i_clk=~i_clk;
 
always@(posedge i_clk) 
begin
	i_Ir<=Rbuff[jj];
	i_Ig<=Gbuff[jj];
	i_Ib<=Bbuff[jj];
	jj<=jj+1;
end
 
 
 
main_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 begin
 fout1 = $fopen("H.txt","w");
end
 
always @ (posedge i_clk)
 begin
    if(jj<=66616)
	$fwrite(fout1,"%d\n",o_H);
	else
	$fwrite(fout1,"%d\n",0);
end
 
integer fout2;
initial begin
 fout2 = $fopen("S.txt","w");
end
 
always @ (posedge i_clk)
 begin
    if(jj<=66616)
	$fwrite(fout2,"%d\n",o_S);
	else
	$fwrite(fout2,"%d\n",0);
end
 
 
integer fout3;
initial begin
 fout3 = $fopen("V.txt","w");
end
 
always @ (posedge i_clk)
 begin
    if(jj<=66616)
	$fwrite(fout3,"%d\n",o_V);
	else
	$fwrite(fout3,"%d\n",0);
end
 
 
 
 
 
endmodule

  

标签:颜色,FPGA,明度,RGB,HSV,testbench,饱和度
From: https://www.cnblogs.com/matlabworld/p/17988424

相关文章

  • 基于FPGA的图像RGB转HLS实现,包含testbench和MATLAB辅助验证程序
    1.算法运行效果图预览 将FPGA结果导入到MATLAB显示效果: 2.算法运行软件版本Vivado2019.2 matlab2022a 3.算法理论概述       在数字图像处理中,RGB和HLS是两种常见的颜色空间。RGB基于红绿蓝三种基本颜色的叠加来定义其他颜色,而HLS则代表色调、亮度和饱和......
  • 新品来袭,全国产ARM+FPGA--"RK3568J+Logos-2"工业核心板,让您的硬件设计“更简单”!
    如需选购,请登录创龙科技天猫旗舰店:tronlong.tmall.com!欢迎加入RK3568J技术交流群:567208221欢迎加入Logos-2技术交流群:311416997更多产品详情以及购买咨询可添加如下客服人员微信(即刻添加,马上咨询) 更多RK3568J+Logos-2产品资料可长按二维码识别下载  ......
  • m基于FPGA的Hamming汉明编译码verilog实现,包含testbench测试文件,不使用IP核
    1.算法仿真效果本系统进行了Vivado2019.2平台的开发,测试结果如下:2.算法涉及理论知识概要在现代数字通信和存储系统中,错误检测和纠正(ErrorDetectionandCorrection,EDC)机制是至关重要的。Hamming码,以其发明者RichardHamming命名,是一种线性错误检测和纠正码,广泛应用于这些系......
  • TBK-RD8T3x 开发板 与1.77' 160(RGB)×128 代码
    TBK-RD8T3x开发板是一款基于增强型的高速1T8051内核的工业级集成触控按键功能的Flash微控制器。它支持多种通信接口,如GPIO、I2C、SPI等。以下是使用GPIO接口控制1.77'160(RGB)×128的代码:#include"tbkrd8t3x.h"voidmain(){//初始化TBK-RD8T3x开发板tbk_rd8t3x_in......
  • Fpga开发笔记(二):高云FPGA发开发软件Gowin和高云fpga基本开发过程
    前言  本篇安装高云的开发软件Gowin,并且描述了一个基于高云fpga的程序的开发环境和完整的下载运行过程。 Gowin软件概述  Gowin软件是广东高云半导体股份有限公司的FPGA开发软件。下载地址  http://www.gowinsemi.com.cn    申请license......
  • FPGA:spi_flash读写测试
    SIP_FLASH逻辑设计需求SPI读写flash,最大4mbit,实现给定地址,长度可完成存储数据读取。本设计包含指令:RSR-1、PP、SE、BE、READ。用户接口:PortnameDirectionTypeDescriptionclk_sysINPUTWIRE输入系统时钟rst_sysINPUTWIRE输入系统......
  • ★教程4:FPGA/MATLAB/Simulink联合应用开发入门与进阶X例——前言★教程3:simulink学
        专业即算法,算法即数学,数学即万物。从事MATLAB算法仿真工作15年,从事FPGA系统开发工作12多年。擅长解决各种算法仿真、建模、通信、图像处理、AI、智能控制等。 1.无线基带,无线图传,编解码2.机器视觉,图像处理,三维重建3.人工智能,深度学习4.智能控制,智能优化目录1.FPG......
  • ★教程4:FPGA/MATLAB/Simulink联合应用开发入门与进阶X例——目录
    1.订阅本教程用户可以免费获得本博任意1个博文对应代码;2.本课程的所有案例(部分理论知识点除外)均由博主编写而成,供有兴趣的朋友们自己订阅学习使用。未经本人允许,禁止任何形式的商业用途;3.本课程我们更侧重于各种实例的完整设计介绍。更全面的介绍FPGA,MATLAB,Simulink的联合开发应......
  • Fpga开发笔记(一):高云FPGA芯片介绍,入手开发板套件、核心板和底板介绍
    前言  FPGA作为一种逻辑芯片,硬件架构独特,具有并行性、低延时性和灵活性等特性,应用领域广泛。  FPGA市场主要玩家是英特尔、AMD、莱迪思、Microchip、Achronix等;国内厂商包括复旦微电、紫光国微、安路科技、东土科技、高云半导体、京微齐力、京微雅格、智多晶、遨格芯等。 ......
  • 基于FPGA的电子琴设计(按键和蜂鸣器)---第一版---郝旭帅电子设计团队
    本篇为各位朋友介绍基于FPGA的电子琴设计(按键和蜂鸣器)----第一版。功能说明:外部输入七个按键,分别对应音符的“1、2、3、4、5、6、7”,唱作do、re、mi、fa、sol、la、si。当某个按键按下时,蜂鸣器发出对应的声音----1.默认发出0.2秒(可以调整)。2.蜂鸣器发出对应的中音。使用平台:本次设计......