0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

实现matlab YCbCr444转YCbCr422实例

FPGA开源工作室 来源:FPGA开源工作室 作者:FPGA开源工作室 2020-09-27 11:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1 YCbCr颜色空间

YCbCr颜色空间是YUV颜色空间的缩放和偏移版本。Y定义为8bit,标称颜色范围为16-235;Cb和Cr标称颜色表示范围为16-240。YCbCr的采样格式一般有44、42、41、和40。

1.1 44 YCbCr格式

图1表示44格式YCbCr采样点的定位。每个采样点有Y、Cb和Cr值,每个颜色值的颜色分量为8bit(典型),因此每个采样点24bit。

图1 44采样

1.2 42 YCbCr格式

图 2表示42格式YCbCr采样点定位。对于每两个水平Y采样点,有一个Cb和一个Cr采样点。

图2 42协调位置采样

2 matlab YCbCr444转YCbCr422

首先将rgb图像转为YCbCr444然后再由YCbCr444转为YCbCr422。

close all clear all clc I=imread('1.bmp'); [H ,W ,D]=size(I); R=double(I(:,:,1)); G=double(I(:,:,2)); B=double(I(:,:,3)); Y0= double(zeros(H,W)); Cb0 =double(zeros(H,W)); Cr0 = double(zeros(H,W)); Cb1 =double(zeros(H,W/2)); Cr1 = double(zeros(H,W/2)); CbCr = double(zeros(H,W)); %RGB转YCbCr444 for i = 1:H for j = 1:W Y0(i, j) = 0.299*R(i, j) + 0.587*G(i, j) + 0.114*B(i, j); Cb0(i, j) = -0.172*R(i, j) - 0.339*G(i, j) + 0.511*B(i, j) + 128; Cr0(i, j) = 0.511*R(i, j) - 0.428*G(i, j) - 0.083*B(i, j) + 128; end end for i=1:1:H for j=2:2:W Cb1(i,j/2)=(Cb0(i,j-1)+Cb0(i,j))/2; end end for i=1:1:H for j=2:2:W Cr1(i,j/2)=(Cr0(i,j-1)+Cr0(i,j))/2; end end for i=1:1:H for j=1:1:W if rem(j,2)==0 CbCr(i,j)=Cr1(i,j/2); else CbCr(i,j)=Cb1(i,(j+1)/2); end end end Iycbcr(:,:,1)=Y0; Iycbcr(:,:,2)=Cb0; Iycbcr(:,:,3)=Cr0; Iycbcr=uint8(Iycbcr); Y0=uint8(Y0); Cb0=uint8(Cb0); Cr0=uint8(Cr0); Cb1=uint8(Cb1); Cr1=uint8(Cr1); CbCr=uint8(CbCr); figure(1), subplot(211),imshow(I),title('RGB'); subplot(212),imshow(Iycbcr),title('YCbCr444'); figure(2), subplot(221),imshow(Cb1),title('Cb1'); subplot(222),imshow(Cr1),title('Cr1'); subplot(223),imshow(Cb0),title('Cb0'); subplot(224),imshow(Cr0),title('Cr0'); figure(3), subplot(211),imshow(Y0),title('Y0'); subplot(212),imshow(CbCr),title('CbCr');

Cb2和Cr2

CbCr交错显示

3 fpga仿真实现

`timescale 1ns/1ps module YUV444_422 ( input clk, input rst_n, input iVsync, input iHsync, input iDVAL, input[23:0] YUV444_D, output reg oVsync, output reg oHsync, output reg oDVAL, output reg[15:0] YUV422_D ); reg iDVAL_reg0,iDVAL_reg1,iDVAL_reg2,iDVAL_reg3; reg iVsync_reg0,iVsync_reg1,iVsync_reg2,iVsync_reg3; reg iHsync_reg0,iHsync_reg1,iHsync_reg2,iHsync_reg3; reg[8:0] YUV444_Cr_Sum0; reg[8:0] YUV444_Cb_Sum0; wire [7:0] temp_Y,temp_Cb,temp_Cr; reg [7:0] temp_Y0,temp_Y1,temp_Y2,temp_Y3; reg [7:0] temp_Cb0,temp_Cb1; reg [7:0] temp_Cr0,temp_Cr1; reg[7:0] Cr,Cb,Crbuf; reg Sel; assign temp_Y=YUV444_D[23:16]; assign temp_Cb=YUV444_D[15:8]; assign temp_Cr=YUV444_D[7:0]; always@(posedge clk) begin iDVAL_reg0 <= iDVAL; iDVAL_reg1 <= iDVAL_reg0; iDVAL_reg2 <= iDVAL_reg1; iDVAL_reg3 <= iDVAL_reg2; oDVAL <= iDVAL_reg3; end always@(posedge clk ) begin iVsync_reg0 <= iVsync; iVsync_reg1 <= iVsync_reg0; iVsync_reg2 <= iVsync_reg1; iVsync_reg3 <= iVsync_reg2; oVsync <= iVsync_reg3; end always@(posedge clk) begin iHsync_reg0 <= iHsync; iHsync_reg1 <= iHsync_reg0; iHsync_reg2 <= iHsync_reg1; iHsync_reg3 <= iHsync_reg2; oHsync <= iHsync_reg3; end always@(posedge clk ) begin //delay 3 clock Y temp_Y0<=temp_Y; temp_Y1<=temp_Y0; temp_Y2<=temp_Y1; temp_Y3<=temp_Y2; //delay 2 clock Cb temp_Cb0<=temp_Cb; temp_Cb1<=temp_Cb0; //delay 2 clock Cr temp_Cr0<=temp_Cr; temp_Cr1<=temp_Cr0; //delay 1 clock YUV444_Cr_Sum0 <= temp_Cr1 + temp_Cr0;//cr0+cr1 YUV444_Cb_Sum0 <= temp_Cb1 + temp_Cb0;//cb0+cb1 //delay 2clock Cr <= YUV444_Cr_Sum0[8:1]; Cb <= YUV444_Cb_Sum0[8:1]; end always@(posedge clk or negedge rst_n) begin if(~rst_n) Sel <= 1'b0; else if(iDVAL_reg3) Sel <= ~Sel; else Sel <= 1'b0; end always@(posedge clk or negedge rst_n)begin if(~rst_n) YUV422_D <= 16'd0; else if(iDVAL_reg3) begin YUV422_D[15:8] <= temp_Y3; YUV422_D[7:0] <=(!Sel)?Cb:Crbuf; Crbuf <= Cr; end end endmodule

fpga实现CbCr22

责任编辑:xj

原文标题:YCbCr444转YCbCr422

文章出处:【微信公众号:FPGA开源工作室】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • YCB
    YCB
    +关注

    关注

    0

    文章

    2

    浏览量

    7911
  • 颜色空间
    +关注

    关注

    0

    文章

    3

    浏览量

    1540

原文标题:YCbCr444转YCbCr422

文章出处:【微信号:leezym0317,微信公众号:FPGA开源工作室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    485换器核心应用:RS232485/422全隔离场景化部署要点

    扰的工业及户外场景。 一、工业自动化:工厂设备集群监控与协同 车间内电脑、PLC、HMI等控制设备多为RS232接口,而现场变频器、伺服驱动器、传感器、智能仪表(如压力表、流量计)多为RS485/RS422接口,需实现“控制端→多设备”的长距离、稳定通信。 1. 数控机床
    的头像 发表于 11-11 15:37 261次阅读

    物联网部署:RS232485/422换器(宽压30V+全隔离)实操指南

    RS232RS485/RS422 485换器是一种工业级通信模块,核心功能是将计算机或设备的RS232接口信号转换为RS485或RS422信号,以满足长距离、高抗干扰的通信需求。
    的头像 发表于 11-11 15:34 462次阅读

    STM32N6的DCMIPP能直接把接收到的YUV422数据转化成RGB565吗?

    YUV444的问题 此选项指示数据为RGB888还是YUV444? 发送端:XS9950芯片,YUV422_8bitYUYV 颜色设置:(Y-U-V) 0xeb0x800x80 接收端:STM32N6
    发表于 08-01 08:06

    基于Matlab与FPGA的双边滤波算法实现

    前面发过中值、均值、高斯滤波的文章,这些只考虑了位置,并没有考虑相似度。那么双边滤波来了,既考虑了位置,有考虑了相似度,对边缘的保持比前几个好很多,当然实现上也是复杂很多。本文将从原理入手,采用Matlab与FPGA设计实现双边
    的头像 发表于 07-10 11:28 4077次阅读
    基于<b class='flag-5'>Matlab</b>与FPGA的双边滤波算法<b class='flag-5'>实现</b>

    工业级USBRS-485/422换器DAM-3238的功能特性与应用解析

    阿尔泰科技DAM-3238是一款通用的USB8路隔离RS-485/422换器,1U机架式结构。
    的头像 发表于 07-07 13:59 420次阅读
    工业级USB<b class='flag-5'>转</b>RS-485/<b class='flag-5'>422</b><b class='flag-5'>转</b>换器DAM-3238的功能特性与应用解析

    OptiSystem应用:用MATLAB组件实现振幅调制

    本案例展示了在OptiSystem中调用MATLAB代码实现振幅调制。 一、建模目标 案例中,我们生成两束功率为0dBm,频率分别为192.7THz、191THz的载波,合束之后经过自定义脉冲的调制
    发表于 06-13 08:46

    做线材,PC的朋友:我不允许你还不知道这颗芯片方案

    支持 3D 显示左/右场/帧 支持高达 0.5% 下展频的扩频时钟,以降低 EMI 支持水平消隐扩展 支持 eDP 模式 支持 DP 1.4a 自适应同步 RGB 444YCbCr 444
    发表于 06-12 10:38

    这4K120HZ的USB-C口方案,最受高端客户喜欢了。

    /帧 支持高达 0.5% 下展频的扩频时钟,以降低 EMI 支持水平消隐扩展 支持 eDP 模式 支持 DP 1.4a 自适应同步 RGB 444YCbCr 444/422/42
    发表于 06-10 19:54

    DP 1.4to HDMI 2.1(DSC):8k@60Hz?不知道这颗料你们顶不顶得住

    的 CEC 隧道 支持 3D 显示左/右场/帧 支持高达 0.5% 下展频的扩频时钟,以降低 EMI 支持水平消隐扩展 支持 eDP 模式 支持 DP 1.4a 自适应同步 RGB 444YCbCr
    发表于 06-10 19:14

    USB485/422换器拆解

    前两天群里的好大哥给我寄了两个他设计的USB485/422换器,制作的初衷也很简单,就是消耗一下他手头的物料,设计的关键就是电子丐帮,面向库存设计,探索低成本!在这里先感谢胡博设计的转换器。
    的头像 发表于 04-10 10:33 2424次阅读
    USB<b class='flag-5'>转</b>485/<b class='flag-5'>422</b><b class='flag-5'>转</b>换器拆解

    如何使用MATLAB实现一维时间卷积网络

    本文对一维卷积操作进行介绍,包括一维扩展卷积和一维因果卷积,以及 MATLAB 对一维卷积的支持情况。在最后通过一个实例演示如何在 MATLAB 中将一维卷积和 LSTM 结合构建分类网络,
    的头像 发表于 03-07 09:15 1666次阅读
    如何使用<b class='flag-5'>MATLAB</b><b class='flag-5'>实现</b>一维时间卷积网络

    OptiSystem应用:用MATLAB组件实现振幅调制

    本案例展示了在OptiSystem中调用MATLAB代码实现振幅调制。 一、建模目标 案例中,我们生成两束功率为0dBm,频率分别为192.7THz、191THz的载波,合束之后经过自定义脉冲的调制
    发表于 02-14 09:39

    TSH8135的三组数据线输入,分别对应的RGB的数据?还是需要转换成YCbCr信号?

    目标:FPGA通过THS8135输出4:4:4的YUV视频信号。 1、TSH8135的三组数据线输入,分别对应的RGB的数据?还是需要转换成YCbCr信号? 2、M1,M2如何配置? 3、SYNC
    发表于 02-12 08:19

    THS8200输出模糊不清怎么解决?

    bit 4:2:2, embedded)HS/VSout +/+, RGB>YCbCr>RGB 的工作模式,依据附件中设置THS8200寄存器后,输出的图像模糊不清,请你们给出好的建议,谢谢!
    发表于 02-12 06:45

    MS9331 宏晶微HD信号重定时芯片 可提供开发资料

    I2S 和 SPDIF 输出。在 3Gbps 的速率下,MS9331 可以支持 4K×2K@30Hz 和 4K×2K(YCbCr420)@60Hz 分辨率的 HD 输
    的头像 发表于 02-10 13:55 838次阅读
    MS9331 宏晶微HD信号重定时芯片 可提供开发资料