数字图像处理(11):RGB转YUV

(1)RGB颜色空间

        RGB颜色空间,是一种基于红色、绿色、蓝色三种基本颜色进行混合的颜色空间,通过这三种颜色的叠加,可以产生丰富而广泛的颜色。RGB颜色空间在计算机图像处理、显示器显示、摄影和影视制作等领域具有广泛应用。R、G、B取值通常8bit表示,因此代表三基色的红、绿、蓝通道分别用0~255的整数表示强度,0亮度最低;255亮度最高。(0,0,0)表示黑色,(255,255,255)表示白色。

(2)YUV颜色空间

        YUV颜色空间,又常称为YCbCr颜色空间,是用于数字电视的颜色空间,Y表示亮度、U表示蓝色色差(蓝色与绿色的差异),V表示红色色差(红色与蓝白色的差异)。

(3)RGB与YUV的转换公式

(4)matlab实现

% 1. 读取图像
rgb_image = imread('3_1280x720.bmp');  % 或其他图像名称

% 获取屏幕分辨率
screen_size = get(0, 'ScreenSize');
screen_width = screen_size(3);
screen_height = screen_size(4);

% 计算合适的显示尺寸
max_single_width = (screen_width - 200) / 3;
scale = max_single_width / size(rgb_image, 2);
display_width = round(size(rgb_image, 2) * scale);
display_height = round(size(rgb_image, 1) * scale);

% 2. 将RGB图像转换为YUV图像
yuv_image = zeros(size(rgb_image));
R = double(rgb_image(:,:,1));
G = double(rgb_image(:,:,2));
B = double(rgb_image(:,:,3));

% RGB to YUV转换
Y = 0.299*R + 0.587*G + 0.114*B;
U = 0.5*B - 0.169*R - 0.331*G + 128;  
V = 0.5*R - 0.419*G - 0.081*B + 128; 

yuv_image(:,:,1) = Y;
yuv_image(:,:,2) = U;
yuv_image(:,:,3) = V;

% 3. 将YUV图像转换回RGB图像
Y = double(yuv_image(:,:,1));
U = double(yuv_image(:,:,2));
V = double(yuv_image(:,:,3));

% YUV to RGB转换
R2 = Y + 1.402*(V-128);
G2 = Y - 0.344*(U-128) - 0.714*(V-128);
B2 = Y + 1.772*(U-128);

% 确保RGB值在正确范围内
rgb_image_again = zeros(size(rgb_image), 'uint8');
rgb_image_again(:,:,1) = uint8(min(max(R2, 0), 255));
rgb_image_again(:,:,2) = uint8(min(max(G2, 0), 255));
rgb_image_again(:,:,3) = uint8(min(max(B2, 0), 255));

% 4. 显示图像
% 计算窗口位置
window_spacing = 50;
x_pos1 = round((screen_width - 3*display_width - 2*window_spacing)/2);
x_pos2 = x_pos1 + display_width + window_spacing;
x_pos3 = x_pos2 + display_width + window_spacing;
y_pos = round((screen_height - display_height)/2);

% 显示原始RGB图像
figure('Name', 'RGB Image', 'NumberTitle', 'off');
imshow(imresize(rgb_image, [display_height display_width]));
set(gcf, 'Position', [x_pos1 y_pos display_width display_height]);

% 显示YUV图像
figure('Name', 'YUV Image', 'NumberTitle', 'off');
imshow(uint8(imresize(yuv_image, [display_height display_width])));
set(gcf, 'Position', [x_pos2 y_pos display_width display_height]);

% 显示转换回的RGB图像
figure('Name', 'Converted RGB Image', 'NumberTitle', 'off');
imshow(imresize(rgb_image_again, [display_height display_width]));
set(gcf, 'Position', [x_pos3 y_pos display_width display_height]);

(5)FPGA         RGB转YUV代码:

module RGB_YUV
(
    input   wire    [7:0]   red     ,
    input   wire    [7:0]   green   ,
    input   wire    [7:0]   blue    ,
    
    output  wire    [7:0]   Y       ,
    output  wire    [7:0]   U       ,
    output  wire    [7:0]   V       
    
);

wire    [17:0] Y_w,U_w,V_w;

parameter Y_1 = 18'd306;            //0.299*1024
parameter Y_2 = 18'd601;            //0.587*1024
parameter Y_3 = 18'd117;            //0.114*1024

parameter U_1 = 18'd512;            //0.5*1024
parameter U_2 = 18'd173;            //0.169*1024
parameter U_3 = 18'd339;            //0.331*1024
parameter U_4 = 18'd131072;         //128*1024

parameter V_1 = 18'd512;            //0.5*1024
parameter V_2 = 18'd429;            //0.419*1024
parameter V_3 = 18'd83;             //0.081*1024
parameter V_4 = 18'd131072;         //128*1024

assign Y_w = Y_1 * red + Y_2 * green + Y_3 * blue;
assign U_w = U_1 * blue  - U_2 * red - U_3 * green + U_4;
assign V_w = V_1 * red  - U_2 * green - U_3 * blue + U_4;

assign Y = Y_w[17:10];
assign U = U_w[17:10];
assign V = V_w[17:10];

endmodule

(6)仿真及实验现象

使用先前的读写BMP图片的仿真测试工程,添加RGB_YUV模块,观察仿真出来的波形。

module img_process
(
    input   wire            clk         ,
    input   wire            reset_n     ,
    input   wire    [10:0]  img_width   ,
    input   wire    [10:0]  img_height  ,
    input   wire            valid_i     ,
    input   wire    [23:0]  img_data_i  ,
    
    output  reg             valid_o     ,
    output  reg     [23:0]  img_data_o  
    
);

wire    [7:0]   Y_data              ;
wire    [7:0]   U_data              ;
wire    [7:0]   V_data              ;
wire    [23:0]  yuv_data            ;

    RGB_YUV     rgb_yuv_inst
(
    .red        (img_data_i[23:16]),
    .green      (img_data_i[15:8]),
    .blue       (img_data_i[7:0]),
    
    .Y          (Y_data),
    .U          (U_data),
    .V          (V_data)
); 

assign yuv_data = {Y_data,U_data,V_data}; 

    always@(posedge clk or negedge reset_n)
        if(!reset_n)begin
            valid_o <= 1'd0;
            img_data_o <= 24'd0;
        end
        else begin
            valid_o <= valid_i;
            img_data_o <= yuv_data;
        end

endmodule

 上板验证后的波形:与matlab处理和仿真出来的差不多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/927747.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用Ubuntu批量下载modis图像(New)

由于最近modis原来批量下载的代码不再直接给出&#xff0c;因此&#xff0c;再次梳理如何利用Ubuntu下载modis数据。 之前的下载代码为十分长&#xff0c;现在只给出一部分&#xff0c;需要自己再补充另一部分。之前的为&#xff1a; 感谢郭师兄的指导&#xff08;https://blo…

HTTP 长连接(HTTP Persistent Connection)简介

HTTP长连接怎么看&#xff1f; HTTP 长连接&#xff08;HTTP Persistent Connection&#xff09;简介 HTTP 长连接&#xff08;Persistent Connection&#xff09;是 HTTP/1.1 的一个重要特性&#xff0c;它允许在一个 TCP 连接上发送多个 HTTP 请求和响应&#xff0c;而无需为…

淘宝商品详情主图SKU图价格|品牌监控|电商API接口

淘宝/天猫获得淘宝商品详情 API 返回值说明 item_get-获得淘宝商品详情 taobao.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&a…

单片机学习笔记 17. 串口通信-发送汉字

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

五层网络协议(封装和分用)

目录 七层网络协议五层网络协议封装1.应用层2.传输层3.网络层4.数据链路层5.物理层 分用1. 物理层2.数据链路层3.网络层 IP 协议4.传输层 UDP 协议5.应用层 七层网络协议 网络通信过程中&#xff0c;需要涉及到的细节&#xff0c;其实是非常非常多的&#xff0c;如果要有一个协…

阿里云人工智能平台(PAI)免费使用教程

文章目录 注册新建实例交互式建模(DSW)注册 注册阿里云账号进行支付宝验证 新建实例 选择资源信息和环境信息,填写实例名称 资源类型需要选择公共资源,才能使用资源包进行抵扣。目前每月送250计算时。1 * NVIDIA A10 8 vCPU 30 GiB 1 * 24 GiB1 * NVIDIA V100 8 vCPU 32 Gi…

【实战】Oracle基础之控制文件内容的5种查询方法

关于Jady&#xff1a; ★工作经验&#xff1a;近20年IT技术服务经验&#xff0c;熟悉业务又深耕技术&#xff0c;为业务加持左能进行IT技术规划&#xff0c;右能处理综合性故障与疑难杂症&#xff1b; ★成长历程&#xff1a;网络运维、主机/存储运维、程序/数据库开发、大数…

蓝桥杯第 23 场 小白入门赛

一、前言 好久没打蓝桥杯官网上的比赛了&#xff0c;回来感受一下&#xff0c;这难度区分度还是挺大的 二、题目总览 三、具体题目 3.1 1. 三体时间【算法赛】 思路 额...签到题 我的代码 // Problem: 1. 三体时间【算法赛】 // Contest: Lanqiao - 第 23 场 小白入门赛 …

使用 Pytorch 构建 Vanilla GAN

文章目录 一、说明二、什么是 GAN&#xff1f;三、使用 PyTorch 的简单 GAN&#xff08;完整解释的代码示例&#xff09;3.1 配置变量3.2 、PyTorch 加速3.3 构建生成器3.4 构建鉴别器 四、准备数据集五、初始化函数六、前向和后向传递七、执行训练步骤八、结果 一、说明 使用…

【Windows 11专业版】使用问题集合

博文将不断学习补充 I、设置WIN R打开应用默认使用管理员启动 1、WIN R输入 secpol.msc 进入“本地安全策略”。 2、按照如下路径&#xff0c;找到条目&#xff1a; “安全设置”—“本地策略”—“安全选项”—“用户账户控制&#xff1a;以管理员批准模式运行所有管理员” …

合规性要求对漏洞管理策略的影响

讨论漏洞管理中持续面临的挑战&#xff0c;包括确定漏洞的优先级和解决修补延迟问题。 介绍合规性要求以及自动化如何简化漏洞管理流程。 您认为为什么尽管技术不断进步&#xff0c;但优先考虑漏洞和修补延迟等挑战仍然存在&#xff1f; 企业基础设施日益复杂&#xff0c;攻…

IDEA全局设置-解决maven加载过慢的问题

一、IDEA全局设置 注意&#xff1a;如果不是全局设置&#xff0c;仅仅针对某个项目有效&#xff1b;例在利用网上教程解决maven加载过慢的问题时&#xff0c;按步骤设置却得不到解决&#xff0c;原因就是没有在全局设置。 1.如何进行全局设置 a.在项目页面&#xff0c;点击f…

Java - JSR223规范解读_在JVM上实现多语言支持

文章目录 1. 概述2. 核心目标3. 支持的脚本语言4. 主要接口5. 脚本引擎的使用执行JavaScript脚本执行groovy脚本1. Groovy简介2. Groovy脚本示例3. 如何在Java中集成 Groovy4. 集成注意事项 6. 与Java集成7. 常见应用场景8. 优缺点9. 总结 1. 概述 JSR223&#xff08;Java Spe…

oracle数据库的启动与关闭

一.oracle数据库的启动过程 启动实例&#xff08;Start the Instance&#xff09; 启动实例&#xff1a;一个Oracle数据库实例由内存结构和后台进程组成&#xff0c;启动实例时会加载这些内存结构和启动进程。实例是数据库的一个运行时环境&#xff0c;它包含了数据库的控制文…

【C++】自主实现stack/queue

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的自主实现stack/queue&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1. stack2. queue 栈&#xff1a;后进先出 队列&#xff1a;先进先出 栈和队列…

Hive学习基本概念

基本概念 hive是什么&#xff1f; Facebook 开源&#xff0c;用于解决海量结构化日志的数据统计。 基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表&#xff0c;并提供类SQL查询功能 本质是将HQL转化为MapReduce程序。 Hive处理的数据存储在H…

Android studio 签名加固后的apk文件

Android studio打包时&#xff0c;可以选择签名类型v1和v2&#xff0c;但是在经过加固后&#xff0c;签名就不在了&#xff0c;或者只有v1签名&#xff0c;这样是不安全的。 操作流程&#xff1a; 1、Android studio 对项目进行打包&#xff0c;生成有签名的apk文件&#xff…

CSS学习记录03

CSS背景 CSS 背景属性用于定义元素的背景效果。 CSS background-color background-color属性指定元素的背景色。 页面的背景色设置如下&#xff1a; body {background-color: lightblue; } 通过CSS&#xff0c;颜色通常由以下方式指定&#xff1a; 有效的颜色名称-比如“…

Unity类银河战士恶魔城学习总结(P155 More example on audio effects更多的音效细节)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节添加了更多的音效细节 音频管理器 AudioManager.cs 使得多个音效可以同时播放&#xff0c;注释掉以下代码 public void PlaySFX(in…

【分组去重】.NET开源 ORM 框架 SqlSugar 系列

&#x1f4a5; .NET开源 ORM 框架 SqlSugar 系列 &#x1f389;&#x1f389;&#x1f389; 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列…