24 位 rgb 到 12 位转换
24 bit rgb to 12 bit conversion
我有一张 640x480 的图像,需要在 VGA 上显示。我必须通过 matlab imread
命令读取该图像,然后将该 RGB 信息转换为二进制,然后在 FPGA(Nexys 4 Artix 7 板)中使用该二进制数据在 VGA 上显示图像。但问题是 VGA 需要 12 位 RGB 而 MATLAB 以 24 位 RGB 读取图像。如何以 12 位 RGB 压缩该图像?
您确定您有 12 位 VGA 吗?通常 24 位 RGB 表示 8 位红色,8 位绿色和 8 位蓝色,这导致颜色分辨率为 2^24 = 16.8 mio colors
将颜色 space 缩小到 12 位会导致 4096 色的颜色分辨率,这对于现代显示器设备来说非常弱。
如果你真的想从 24 位缩小到 12 位,这取决于你必须做的颜色编码。最常见的是使用三种颜色的 MSB,这会导致像
这样的位映射
RGB12 = RGB24[23:20] & RGB24[15:12] & RGB24[7:4]
编辑:刚刚在 Nexys 示意图中看到您确实有 12 位 VGA 输出。提到的位映射应该是有效的。您可以使用 VHDL
进行此映射
...
signal RGB24 : std_logic_vector(23 downto 0);
signal RGB12 : std_logic_vector(11 downto 0);
...
RGB12 <= RGB24(23 downto 20) & RGB24(15 downto 12) & RGB24(7 downto 4);
我有一张 640x480 的图像,需要在 VGA 上显示。我必须通过 matlab imread
命令读取该图像,然后将该 RGB 信息转换为二进制,然后在 FPGA(Nexys 4 Artix 7 板)中使用该二进制数据在 VGA 上显示图像。但问题是 VGA 需要 12 位 RGB 而 MATLAB 以 24 位 RGB 读取图像。如何以 12 位 RGB 压缩该图像?
您确定您有 12 位 VGA 吗?通常 24 位 RGB 表示 8 位红色,8 位绿色和 8 位蓝色,这导致颜色分辨率为 2^24 = 16.8 mio colors
将颜色 space 缩小到 12 位会导致 4096 色的颜色分辨率,这对于现代显示器设备来说非常弱。
如果你真的想从 24 位缩小到 12 位,这取决于你必须做的颜色编码。最常见的是使用三种颜色的 MSB,这会导致像
这样的位映射RGB12 = RGB24[23:20] & RGB24[15:12] & RGB24[7:4]
编辑:刚刚在 Nexys 示意图中看到您确实有 12 位 VGA 输出。提到的位映射应该是有效的。您可以使用 VHDL
进行此映射...
signal RGB24 : std_logic_vector(23 downto 0);
signal RGB12 : std_logic_vector(11 downto 0);
...
RGB12 <= RGB24(23 downto 20) & RGB24(15 downto 12) & RGB24(7 downto 4);