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

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

3天内不再提示

Alpha半透明图形叠加算法Matlab+Verilog的设计实现

FPGA之家 来源:FPGA之家 2024-05-01 10:28 次阅读

Alpha算法的研究

Alpha通道是一个8位的灰度通道,该通道用256级灰度来记录图像中的透明度信息,定义透明、不透明和半透明区域,其中黑表示全透明,白表示不透明,灰表示半透明[15]。

半透明混合算法目前在常用到的算法是AlphaBlend。其算法如下:假设一幅图象是A,另一幅透明的图象是B,那么透过B去看A,看上去的图象C就是B和A的混合图象,设B图象的透明度为alpha(取值为0-1,1为完全透明,0为完全不透明)。Alpha每个通道色彩混合公式如下:

7e00cc84-0116-11ef-a297-92fbcf53809c.png

R(x)、G(x)、B(x)分别指颜色x的RGB分量原色值。从上面的公式可以知道,Alpha其实是一个决定混合透明度的数值。改变这个 alpha 值可以得到一个渐变的效果。分离RGB色用"位与"、"移位"运算的方法。

透明的比例按2的N次幂来分级,这样可以快速运算。如果是按256级Alpha = 1/256,B图的权重 = (256-n)/256,则A图的权重= n/256,由式 6-1可以得到红色通道256级半透明算法:

7e113b5a-0116-11ef-a297-92fbcf53809c.png

1.2. Alpha算法实现

1.2.1. Matlab代码

% -----------------------------------------------------------------------

% CONFIDENTIAL IN CONFIDENCE

% This confidential and proprietary software may be only used as authorized

% by a licensing agreement from CrazyBingo (Thereturnofbingo).

% In the event of publication, the following notice is applicable:

% Copyright (C) 2011-201x CrazyBingo Corporation

% The entire notice above must be reproduced on all authorized copies.

% Author                :       CrazyBingo

% Technology blogs      :       http://blog.chinaaet.com/crazybingo %                               http://www.cnblogs.com/crazybingo % Eamil Address         :       thereturnofbingo@gmail.com

% Filename              :       RGB_Alpha.m

% Data                  :       2013-04-22

% Version               :       1.0

% Description           :       Alpha Algorithm of 2 RGB Image.

% Modification History  :

% Data          By          Version         Change Description

%=======================================================================

% 13/04/22      CrazyBingo  1.0             Original

% -----------------------------------------------------------------------

clear all;  %清除Matlab缓存数据

% -----------------------------------------------------------------------

% Read PC iamge to Matlab

IMG1 = imread('E:Matlab_InformationMatlab_ProjectBMPFish2.bmp');    % 读取RGB文件,X光的鱼图

IMG2 = imread('E:Matlab_InformationMatlab_ProjectBMPWater.bmp');    % 读取RGB文件,绿叶湖泊

h = size(IMG1,1);         % 读取图像高度

w = size(IMG1,2);         % 读取图像宽度

figure(1);

subplot(1,2,1);

imshow(uint8(IMG1));

subplot(1,2,2);

imshow(uint8(IMG2));

% -----------------------------------------------------------------------

% IMG1 add tO IMG2 with alpha algorthm

ALPHA_PARAM = 0.6;

IMG1 = double(IMG1);

IMG2 = double(IMG2);

IMG3 = zeros(h,2,3); for i = 1 : h for j = 1 : w

        IMG3(i,j,1) = IMG1(i,j,1)*ALPHA_PARAM + IMG2(i,j,1)*(1-ALPHA_PARAM);

        IMG3(i,j,2) = IMG1(i,j,2)*ALPHA_PARAM + IMG2(i,j,2)*(1-ALPHA_PARAM);

        IMG3(i,j,3) = IMG1(i,j,3)*ALPHA_PARAM + IMG2(i,j,3)*(1-ALPHA_PARAM);

    end

end

% -------------------------------------------------------------------------

figure(2);

imshow(uint8(IMG3));

title('Alpha Image with IMG1 & IMG2');

imwrite(IMG3,'E:Matlab_InformationMatlab_ProjectRGB_Alpha_ProcessRGB_Alpha.bmp');  %保存重建后的BMP

1.2.2. 效果图

7e1d7ac8-0116-11ef-a297-92fbcf53809c.jpg

1.2.3.半透明算法的FPGA实现

Verilog中,通过组合逻辑,运用内嵌乘法器,以及移位运算,可以快速实现对两幅图像的透明度的实时控制。设计中设定了256级半透明级数,通过按键来控制alpha_data的参数,从而实现调节两幅图像之间的透明度。Verilog算法如下所示:

1 wire [15:0] red_data = ((8'd255-alpha_data)* lcd_data_reg[15:11]+  alpha_data * lcd_data_in[15:11])>> 8; //红色通道
2  
3 wire [15:0] gre_data =  ((8'd255-alpha_data)*lcd_data_reg[10:5]+  alpha_data * lcd_data_in[10:5])>> 8; //绿色通道
4  
5 wire [15:0] blu_data =  ((8'd255-alpha_data)*lcd_data_reg[4:0]+  alpha_data * lcd_data_in[4:0])>> 8; //蓝色通道
6  
7 assign lcd_data = disp_area?{red_data[4:0],gre_data[5:0],  blu_data[4:0]} : lcd_data_reg; //RGB合并

为测试半透明算法,将分形图与彩条叠加,通过外部按键的调节,验证了此半透明算法的正确性。VGA半透明图形叠加如下图所示,此时即可见分形图,又可见8条彩条,两者相互融合。

7e51a550-0116-11ef-a297-92fbcf53809c.jpg

图 6-1 半透明算法验证图

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

    关注

    185

    文章

    2974

    浏览量

    230414
  • RGB
    RGB
    +关注

    关注

    4

    文章

    798

    浏览量

    58467
  • 乘法器
    +关注

    关注

    8

    文章

    205

    浏览量

    37046
  • Alpha
    +关注

    关注

    0

    文章

    45

    浏览量

    25612
  • 按键控制
    +关注

    关注

    1

    文章

    44

    浏览量

    8773

原文标题:Alpha半透明图形叠加算法Matlab+Verilog实现

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    VI上写的程序运行起来的时候前面板看起来是透明半透明...

    VI上写的程序运行起来的时候前面板看起来是透明半透明...
    发表于 08-11 09:21

    求51单片机显示透明图

    求51单片机显示透明图片,即把一个图片叠加在另一个图片上。
    发表于 08-22 09:50

    《Visual C# 2008程序设计经典案例设计与实现》---半透明的T形窗体

    《Visual C# 2008程序设计经典案例设计与实现》---半透明的T形窗体[hide][/hide]
    发表于 05-02 13:32

    DM36x的OSD透明显示问题,请问有没有人实现过图片的透明叠加显示呢? 

    本帖最后由 一只耳朵怪 于 2018-5-28 17:13 编辑 大家好!        在DM368上,可使用SW OSD Lib实现字符的透明叠加,不知道可不可实现图片的
    发表于 05-28 13:09

    如何实现软件alpha混合?

    件在这些图中部分重叠。其中一个具有α150,另一个具有255。在FL2.PNG中,实际的LCD屏幕上没有实现alpha混合。如何实现软件(非硬件)alpha混合?YTS 以上来自于百
    发表于 11-22 15:20

    请问AD里铜皮显示半透明如何改到非透明

    AD里铜皮显示半透明,怎么改到非透明?如图
    发表于 04-22 07:35

    ili9341透明图片显示颜色不正的解决办法有哪些?

    ili9341 透明图片显示颜色不正,只换ili9488的屏和驱动,其他函数不变,就能正常显示。调了好几天了也没找到驱动哪里的问题,求大神解答
    发表于 04-22 22:04

    最强加密算法?AES加密算法MatlabVerilog实现 精选资料推荐

    目录背景AES加密的几种模式基本运算AES加密原理Matlab实现Verilog实现Testbench此文重点讲述了AES加密算法的加密模式
    发表于 07-28 07:34

    基于FPGA的Alpha半透明图叠加算法硬件实现

    发表于 08-24 21:19 10次下载

    JAVA教程之半透明图

    JAVA教程之半透明图片,很好的JAVA的资料,快来学习吧
    发表于 04-11 17:14 1次下载

    matlab实现图像叠加

    matlab基础语言实现图像叠加,可调透明度,可调图像大小,可调叠加位置,用以参考
    发表于 04-19 09:39 9次下载

    BP算法及其matlab实现

    高级自动控制算法:BP算法及其matlab实现
    发表于 12-02 11:45 2次下载

    半透明三维物体表面光泽真实感实时渲染方法

    针对具有半透明特性玉石的真实感渲染问题,提出一种利用高光层、漫反射层、透射层三层光照模型叠加的解决方法。首先对散射层结合漫反射剖面来模拟半透明玉石的次表面散射效果,提出一种可改变漫反射剖面的散射方法
    发表于 12-11 15:44 1次下载
    <b class='flag-5'>半透明</b>三维物体表面光泽真实感实时渲染方法

    使用MatlabVerilog实现fibonacci序列包括源代码和testbench

    使用MatlabVerilog实现fibonacci序列包括源代码和testbench(电源威廉希尔官方网站 论坛app)-使用MatlabVerilog
    发表于 09-16 14:41 13次下载
    使用<b class='flag-5'>Matlab</b>和<b class='flag-5'>Verilog</b><b class='flag-5'>实现</b>fibonacci序列包括源代码和testbench

    Alpha半透明图叠加设计

    Alpha 通道**是一个 **8 **位的灰度通道,该通道采用** 2^8 = 256 **级灰度来记录图像中的透明度信息
    的头像 发表于 10-09 10:42 709次阅读
    <b class='flag-5'>Alpha</b><b class='flag-5'>半透明图</b>像<b class='flag-5'>叠加</b>设计