桌面融合软件/多通道融合/边缘融合原理

作者:创始人 日期:2020-06-18 人气:2223
桌面融合软件/边缘融合软件免费下载,请点这里

一、什 合?

边缘融合基本概念:多通道投影机投出的多组图象经过边缘融合技术处理实现的一整幅图象,并且显示出的图象没有缝隙更加明亮,清晰,超大,且画面的效果就像是一台投影机投射的画面。 这种显示的过程就叫做边缘融合

而原有的投影显示,当使用二台或多台投影机组合,投射一幅画面,就会有一部分影象灯光重叠(如下图1),而使用边缘融合机处理后就能是把二台投影机 重叠部分通过几何线性处理,使整幅画面的亮度达到一致。实现多画面重组为一整幅画面(如下图2),尽而满足社会各界对超大屏幕显示的无缝处理需求。

随着大屏幕显示、无缝拼接,在中国已经被越来越多的展览馆、博物馆、政府机构、公司、企事业单位所接受,从大屏幕公司的产品展示到企业的发展历史与 荣誉,从大屏幕信息会议系统、交通信息管理系统到大型购物场所、展览馆、车站等等的大屏幕消息发布系统,从商业运营管理到工业的生产控制。几乎我们生活中 处处都可以看到大屏幕、多屏幕多媒体的展示平台。但是相对于不同应用场所,LED拼接墙以及投影箱体拼接墙始终是由一个一个的背投箱体拼接而成,使得画面 的完整性受到一定的影响。边缘融合技术是近年来兴起的一个新的无缝拼接技术,它更好的改善了拼接图像的视觉效果。

二、边缘融合原理图

建立在多画面处理器的基础之上,将原本有分解的光源,投影到一个屏幕上,实现一个完整的无缝隙拼接的虚拟图片。

三、为

通常大屏幕均是由多台投影机投射的投影画面拼接而成,由于在多通道投影显示系统中,每台投影机都是相互独立的,两个投影机所投出的画面之间会有缝 隙。虽然经过调整这个缝隙会变得很小,但对专业用户来说,这样的缝隙也是不能接受的。而且很多通道大屏幕并不是平面的,而是柱状环幕或者是球幕,这样就会 在曲面上产生投影变形。所以对于这些大屏幕,不但需要经过专业边缘融合处理,而且还要经过特殊的曲面几何纠正处理。 为了解决这个问题,就需要用专业的边缘融合机来对多路输出进行处理,最终生成一个完整一体化、无失真的多通道无缝拼接图像。所以数字化大屏幕无缝拼接投影 显示技术将逐步成为实现这一需求的有效途径。
??? 由清华紫光自主知识产权开发的GPU边缘融合机,正为解决这一需求而诞生。该技术可以通过调整色彩平衡和伽玛值,使得两台或多台投影机投射出的图像无缝地融合拼接在一起,从而使复杂投影环境中的多个彼此相邻的投影图像平滑无缝地连接,实现一体化整体显示图像。

五、显示工作原理

显卡是负责计算机图形最终输出的重要部件。它从CPU接受显示数据和控制命 令,然后将处理过的图像信号发送给显示器。 显卡本身是一个智能的嵌入式系统,其核心是图形处理芯片(GPU),负责完成大量的图像运算和内部控制工作。显示所需的相关数据存放在显存中。 本文就显卡对于图像的处理和控制过程进行介绍。

显卡处理图像数据的过程

1、 CPU → 显卡
CPU将有关作图的指令和数据通过总线传送给显卡。对于现代显卡,由于需要传送大量的图像数据,因而显卡接口在不断改进,从最早的ISA接口到PCI、流行的AGP接口,以及正在普及的PCI-E接口,其数据吞吐能力不断增强。

2、 显卡内部图像处理
GPU根据CPU的要求,完成图像处理过程,并将最终图像数据保存在显存中。

3、 最终图像输出
对于普通显卡 ,RAMDAC从显存中读取图像数据,转换成模拟信号传送给显示器。
对于具有数字输出接口的显卡,则直接将数据传递给数字显示器。

GPU的角色GPU是显卡的核心部件,它负责大量的图像数据运算和内部的控制工作。 GPU是否强大,直接影响到显卡图像加速的性能。它所负责的图像运算有:

  • 2D图像加速:负责响应系统发送的GDI命令。
  • 3D图像加速:GPU根据3D数据生成多边形,并进行贴图/渲染/光照/雾化等计算,以及Z-Buffer遮挡计算。在先进的GPU中,有多条流水线进行3D处理,因而具有强劲的性能。

GPU的加速功能可以通过支持程序打开(例如Windows的DirectX),从而分担CPU的计算工作,提高整台电脑的性能。若图形加速功能未 打开,则电脑CPU必须承担所有图像生成所需的计算。 GPU的控制程序存放在显卡BIOS中,著名显卡厂商都提供显卡BIOS数据和升级程序。通过刷新显卡BIOS,可以使显卡具有更强的处理能力并消除旧版 的缺陷。

显存的作用显存是显卡系统的专用内存,它里面存放图像处理所用的中间数据和最终数据。 经过GPU处理后,图像最终以点阵形式存放在显存中。对于不同的显示分辨率和色彩深度,显卡中的最终显示数据组织格式不同, 不同显示模式所需的显存大小:

显示分辨率 色彩深度 显存大小(字节)
640*480 8bit 300K
640*480 24bit 1.2M
1024*768 24bit 2.034M

为了加快显示过程,显存还具有多页结构,允许显示其中一个页面时对另外的页面进行后台更新,更新完毕后再切换到前台显示。 由上表可以看到,最终图像数据对于现代显卡的显存(32M、64M甚至更多)仅占很小的一部分。那么多余的显存用来做什么呢? 其余的显存用于图像中间数据存放,包括:2D窗口移动、遮挡数据,3D图形的多边形数据、贴图材质数据等,以及GPU计算的中间结果等。

六、色彩空间转换公式

在做图像处理时,我们一般采用的是RGB空间,但是在某些特殊情况下,我们也会用到其他的颜色空间。本文主要介绍一些常见的颜色空间的概念和转换公式。

颜色的实质是一种光波。它的存在是因为有三个实体:光线、被观察的对象以及观察者。人眼是把颜色当作由被观察对象吸收或者反射不同波长的光波形成 的。例如,当在一个晴朗的日子里,我们看到阳光下的某物体呈现红色时,那是因为该物体吸收了其它波长的光,而把红色波长的光反射到我们人眼里的缘故。当 然,我们人眼所能感受到的只是波长在可见光范围内的光波信号。当各种不同波长的光信号一同进入我们的眼睛的某一点时,我们的视觉**会将它们混合起来,作 为一种颜色接受下来。同样我们在对图像进行颜色处理时,也要进行颜色的混合,但我们要遵循一定的规则,即我们是在不同颜色模式下对颜色进行处理的。

1.RGB颜色模式

虽然可见光的波长有一定的范围,但我们在处理颜色时并不需要将每一种波长的颜色都单独表示。因为自然界中所有的颜色都可以用红、绿、蓝 (RGB)这三种颜色波长的不同强度组合而得,这就是人们常说的三基色原理。因此,这三种光常被人们称为三基色或三原色。有时候我们亦称这三种基色为添加 色(Additive Colors),这是因为当我们把不同光的波长加到一起的时候,得到的将会是更加明亮的颜色。把三种基色交互重叠,就产生了次混合色:青(Cyan)、洋 红(Magenta)、黄(Yellow)。这同时也引出了互补色(Complement Colors)的概念。基色和次混合色是彼此的互补色,即彼此之间最不一样的颜色。例如青色由蓝色和绿色构成,而红色是缺少的一种颜色,因此青色和红色构 成了彼此的互补色。在数字视频中,对RGB三基色各进行8位编码就构成了大约16.7万种颜色,这就是我们常说的真彩色。顺便提一句,电视机和计算机的监 视器都是基于RGB颜色模式来创建其颜色的。

2.Lab颜色模式

Lab颜色是由RGB三基色转换而来的,它是由RGB模式转换为HSB模式和CMYK模式的桥梁。该颜色模式由一个发光率 (Luminance)和两个颜色(a,b)轴组成。它由颜色轴所构成的平面上的环形线来表示颜色的变化,其中径向表示色饱和度的变化,自内向外,饱和度 逐渐增高;圆周方向表示色调的变化,每个圆周形成一个色环;而不同的发光率表示不同的亮度并对应不同环形颜色变化线。它是一种具有“独立于设备”的颜色模 式,即不论使用任何一种监视器或者打印机,Lab的颜色不变。

RGB=>Lab

|X| |0.433910 0.376220 0.189860| |R/255|
|Y| = |0.212649 0.715169 0.072182|*|G/255|
|Z| |0.017756 0.109478 0.872915| |B/255|
L = 116*Y1/3 for Y>0.008856
L = 903.3*Y for Y<=0.008856
a = 500*(f(X)-f(Y))
b = 200*(f(Y)-f(Z))
其中 f(t)=t1/3 for t>0.008856
f(t)=7.787*t+16/116 for t<=0.0088563.HSB颜色模式

从心理学的角度来看,颜色有三个要素:色泽(Hue)、饱和度(Saturation)和亮度(Brightness)。HSB颜色模式便是基 于人对颜色的心理感受的一种颜色模式。它是由RGB三基色转换为Lab模式,再在Lab模式的基础上考虑了人对颜色的心理感受这一因素而转换成的。因此这 种颜色模式比较符合人的视觉感受,让人觉得更加直观一些。它可由底与底对接的两个圆锥体立体模型来表示,其中轴向表示亮度,自上而下由白变黑;径向表示色 饱和度,自内向外逐渐变高;而圆周方向,则表示色调的变化,形成色环。

RGB=>HSB

V=max(R,G,B)
S=(V-min(R,G,B))*255/V if V!=0, 0 otherwise
(G – B)*60/S, if V=R
H= 180+(B – R)*60/S, if V=G
240+(R – G)*60/S, if V=B 若 H<0,则 H=H+360 使用上面从 0° 到 360° 变化的公式计算色调( hue)值,确保它们被 2 除后能试用于8位。

4.YUV颜色模式

这是电视系统中常用的颜色模式,即电视中所谓的分量(Component)信号。该模式由一个亮度信号Y和两个色差信号U、V组成。它是利用了 人眼对亮度信号敏感而对色度信号相对不敏感的特点,将RGB颜色通过亮度信号公式Y=039R+050G+011B转换为一个亮度信号Y和两个色差 分量信号U(R-Y)、V(B-Y),即对色差信号进行了频带压缩。毫无疑问,这是以牺牲信号的质量为代价的。

RGB<=>YUVY = 0.299R + 0.587G + 0.114BU = -0.147R – 0.289G + 0.436BV = 0.615R – 0.515G – 0.100BR = Y + 1.14VG = Y – 0.39U – 0.58VB = Y + 2.03U5.CMYK颜色模式

这是彩色印刷使用的一种颜色模式。它由青(Cyan)、洋红(Magenta)、黄(Yellow)和黑(Black)四种颜色组成。其中黑色 之所以用K来表示,是为避免和RGB三基色中的蓝色(Blue,用B表示)发生混淆。该种模式的创建基础和RGB不同,它不是靠增加光线,而是靠减去光 线,因为和监视器或者电视机不同的是,打印纸不能创建光源,它不会发射光线,只能吸收和反射光线。因此通过对上述四种颜色的组合,便可以产生可见光谱中的 绝大部分颜色了。

RGB<=CMYK

R = (255 – C) * ((255 – K) / 255)
G = (255 – M) * ((255 – K) / 255)
B = (255 – Y) * ((255 – K) / 255)
6.部分程序code

void HSI2RGB(BYTE &BR,BYTE &BG,BYTE &BB,BYTE BH,BYTE BS,BYTE BI)
{
int nHValue = static_cast<int>(BH);
int nSValue = static_cast<int>(BS);
int nLValue = static_cast<int>(BI);

float fHAngle = ((float)nHValue ) / 255 * 360;

float H = fHAngle / 180 * PI;
float S = ((float)nSValue ) / 100;
float I = ((float)nLValue ) / 100;

float R = -1;
float G = -1;
float B = -1;

if(fHAngle >= 0 && fHAngle < 120)
{
B = I * ( 1.0 – S );
R = I * ( 1.0 + ( S * cos( H ) / cos( 60.0 / 180 * PI – H ) ) );
G = 3.0 * I – ( B + R );
}
else if(fHAngle >= 120 && fHAngle < 240)
{
R = I * ( 1.0 – S );
G = I * ( 1.0 + S * cos( H – 120.0 / 180 * PI ) / cos( 180.0 / 180 * PI – H ) );
B = 3.0 * I – ( R + G );
}
else if(fHAngle >= 240 && fHAngle < 360)
{
G = I * ( 1.0 – S );
B = I * ( 1.0 + S * cos( H – 240.0 / 180 * PI ) / cos( 300.0 / 180 * PI – H ) );
R = 3.0 * I – ( G + B );
}
int R_value_in_rgb = R * 255;
int G_value_in_rgb = G * 255;
int B_value_in_rgb = B * 255;
BR = static_cast<BYTE>(R_value_in_rgb);
BG = static_cast<BYTE>(G_value_in_rgb);
BB = static_cast<BYTE>(B_value_in_rgb);
}
void RGB2HSI(BYTE r,BYTE g,BYTE b,BYTE &h,BYTE &s,BYTE &i)
{
short m_fr = static_cast<short>(r);
short m_fg = static_cast<short>(g);
short m_fb = static_cast<short>(b);

float m_fiR = static_cast<float>(m_fr) / 255;
float m_fsG = static_cast<float>(m_fg) / 255;
float m_fhB = static_cast<float>(m_fb) / 255;

if( m_fr == m_fg && m_fg == m_fb)
{
int iHValue = 0;
int iSValue = 0;
int iLValue = ((float)m_fr)/ 255 * 100;
h = static_cast<BYTE>(iHValue);
s = static_cast<BYTE>(iSValue);
i = static_cast<BYTE>(iLValue);
return;
}
float max_value_of_rgb = GetMax( m_fiR, m_fsG, m_fhB );
float min_value_of_rgb = GetMin( m_fiR, m_fsG, m_fhB );
float fSumRGB =m_fiR + m_fsG + m_fhB ;
if( fSumRGB <= 0.0 )
fSumRGB = 0.001;
float I = (m_fiR + m_fsG + m_fhB) / 3;
float S = 1.0 – 3.0 * min_value_of_rgb / fSumRGB;
float H = acos( (( m_fiR – m_fsG ) + ( m_fiR – m_fhB ))/2 / sqrt( ( m_fiR – m_fsG )*( m_fiR – m_fsG ) + ( m_fiR -m_fhB ) * ( m_fsG – m_fhB) + 0.0001 ) );
float fHAngle = H / PI * 180;
if( m_fsG < m_fhB )
fHAngle = 360 – fHAngle;
if( fHAngle > 360.0 )
fHAngle = 360.0;
int nHValue = fHAngle / 360 * 255;
int nSValue = S * 100;
int nLValue = I * 100;
h = nHValue;
s = nSValue;
i = nLValue;
}

    

你觉得这篇文章怎么样?

00