Actionscript 3 在actionscript中为视频添加噪波
在我开始之前,如果我要问的是被认为是超级新手的问题,我想道歉 所以我在试用Lee Brimelow关于使用actionscript3创建简单AR场景的教程。(http://blog.theflashblog.com/?p=901) 考虑到我以前从未用AdobeFlexBuilder创建过一些东西,它的效果非常好。(我在看过这些教程后立即安装了Flex Builder) 这是源代码Actionscript 3 在actionscript中为视频添加噪波,actionscript-3,video,augmented-reality,noise,flartoolkit,Actionscript 3,Video,Augmented Reality,Noise,Flartoolkit,在我开始之前,如果我要问的是被认为是超级新手的问题,我想道歉 所以我在试用Lee Brimelow关于使用actionscript3创建简单AR场景的教程。(http://blog.theflashblog.com/?p=901) 考虑到我以前从未用AdobeFlexBuilder创建过一些东西,它的效果非常好。(我在看过这些教程后立即安装了Flex Builder) 这是源代码 package { import flash.display.BitmapData; import
package {
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.media.Camera;
import flash.media.Video;
import flash.utils.ByteArray;
import org.libspark.flartoolkit.core.FLARCode;
import org.libspark.flartoolkit.core.param.FLARParam;
import org.libspark.flartoolkit.core.raster.rgb.FLARRgbRaster_BitmapData;
import org.libspark.flartoolkit.core.transmat.FLARTransMatResult;
import org.libspark.flartoolkit.detector.FLARSingleMarkerDetector;
import org.libspark.flartoolkit.support.pv3d.FLARBaseNode;
import org.libspark.flartoolkit.support.pv3d.FLARCamera3D;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
[SWF(width="640", height="480", frameRate="30", backgroundColor="#FFFFFF")]
public class FLARdemo extends Sprite
{
[Embed(source="pat1.pat", mimeType="application/octet-stream")]
private var pattern:Class;
[Embed(source="camera_para.dat", mimeType="application/octet-stream")]
private var params:Class;
private var fparams:FLARParam;
private var mpattern:FLARCode;
private var vid:Video;
private var cam:Camera;
private var bmd:BitmapData;
private var raster:FLARRgbRaster_BitmapData;
private var detector:FLARSingleMarkerDetector;
private var scene:Scene3D;
private var camera:FLARCamera3D;
private var container:FLARBaseNode;
private var vp:Viewport3D;
private var bre:BasicRenderEngine;
private var trans:FLARTransMatResult;
public function FLARdemo()
{
setupFLAR();
setupCamera();
setupBitmap();
setupPV3D();
addEventListener(Event.ENTER_FRAME, loop);
}
private function setupFLAR():void
{
fparams = new FLARParam();
fparams.loadARParam(new params() as ByteArray);
mpattern = new FLARCode(16, 16);
mpattern.loadARPatt(new pattern());
}
private function setupCamera():void
{
vid = new Video(640, 480);
cam = Camera.getCamera();
cam.setMode(640, 480, 30);
vid.attachCamera(cam);
addChild(vid);
}
private function setupBitmap():void
{
bmd = new BitmapData(640, 480);
bmd.draw(vid);
raster = new FLARRgbRaster_BitmapData(bmd);
detector = new FLARSingleMarkerDetector(fparams, mpattern, 80);
}
private function setupPV3D():void
{
scene = new Scene3D();
camera = new FLARCamera3D(fparams);
container = new FLARBaseNode();
scene.addChild(container);
var pl:PointLight3D = new PointLight3D();
pl.x = 1000;
pl.y = 1000;
pl.z = -1000;
var ml:MaterialsList = new MaterialsList({all: new FlatShadeMaterial(pl)});
var Cube1:Cube = new Cube(ml, 30, 30, 30);
var Cube2:Cube = new Cube(ml, 30, 30, 30);
Cube2.z = 50
var Cube3:Cube = new Cube(ml, 30, 30, 30);
Cube3.z = 100
container.addChild(Cube1);
container.addChild(Cube2);
container.addChild(Cube3);
bre = new BasicRenderEngine();
trans = new FLARTransMatResult();
vp = new Viewport3D;
addChild(vp);
}
private function loop(e:Event):void
{
bmd.draw(vid);
try
{
if(detector.detectMarkerLite(raster, 80) && detector.getConfidence() > 0.5)
{
detector.getTransformMatrix(trans);
container.setTransformMatrix(trans);
bre.renderScene(scene, camera, vp);
}
}
catch(e:Error){}
}
}
}
我想问的是:
我们是否可以在最终视频输出中添加一些噪声?我试图通过分别添加噪声来找出峰值信噪比。
我能在噪音和视频之间做些卷积吗
哦,顺便说一句,我这么做是为了完成大学的作业。我的教授想让我解释FlarToolKit到底是如何工作的。(如矩阵投影、通过迭代法获得误差等细节)
多谢各位。
Prama动态创建细粒度噪波在计算上非常昂贵,因此我生成低分辨率噪波并将其放大。在您的项目中,只需在addEventListener调用之后添加位图设置代码,然后添加单行以生成活动循环中的噪声
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BlendMode;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
import flash.media.Camera;
import flash.media.Video;
import flash.utils.getTimer;
public class NoiseMain extends Sprite
{
protected static const VID_WIDTH : uint = 640;
protected static const VID_HEIGHT : uint = 480;
protected static const NOISE_SCALE_X : Number = 4;
protected static const NOISE_SCALE_Y : Number = 2;
protected var _vid : Video;
protected var _noise : BitmapData;
protected var _composite : BitmapData;
protected var _matrix : Matrix;
public function NoiseMain()
{
// We're creating a webcam outlet, but not adding it to the stage since we want to post-process the image.
_vid = new Video(VID_WIDTH, VID_HEIGHT);
var cam : Camera = Camera.getCamera();
cam.setMode(VID_WIDTH, VID_HEIGHT, 30);
_vid.attachCamera(cam);
var w : uint = Math.ceil(VID_WIDTH / NOISE_SCALE_X);
var h : uint = Math.ceil(VID_HEIGHT / NOISE_SCALE_Y);
_noise = new BitmapData(w, h, false, 0xFFFFFF);
_composite = new BitmapData(VID_WIDTH, VID_HEIGHT, false, 0x000000);
var bmp : Bitmap = new Bitmap(_composite);
addChild(bmp);
_matrix = new Matrix(NOISE_SCALE_X, 0, 0, NOISE_SCALE_Y);
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
protected function enterFrameHandler(evt : Event) : void
{
_noise.noise(getTimer(), 204, 255, 7, true);
_composite.lock();
_composite.draw(_vid);
_composite.draw(_noise, _matrix, null, BlendMode.MULTIPLY);
_composite.unlock();
}
}
}
编辑:我已经修改了我的示例,使之更符合您的意图。通过在第二次draw()调用中更改BlendMode,您可以调整噪波比例常数以更改噪波的“纹理”,并干扰噪波的强度(noise()方法的第二个和第三个参数)和噪波的视觉外观)。感谢Bartzilla修复我的帖子!很抱歉,我是个彻头彻尾的傻瓜乔舒亚,非常感谢你。我要试试你的代码。如果我有麻烦,我会找你的。再次感谢!:)约书亚。。噪音很有效。非常感谢。但我担心我解释错了:你看,我想要的是,噪音会在相机启动时出现——而不是在程序运行(计算、变换、渲染3d对象等)之后。如果在相机启动后出现噪音,希望我能找出我的程序可以容忍的噪音限制(通过增加或减少噪音)。因为我的主要目的是计算程序的峰值信噪比。乔舒亚的误会我很抱歉。你能帮我吗(我真的很感谢你的帮助。Danke。我已经更新了我的代码示例,使其与你所做的事情更加相关。再次,非常感谢你,Joshua..但它仍然没有阐明我的观点..(很抱歉Joshua没有正确解释它..)噪音仍然出现在程序结束时。我试图做的是:在程序开始时相机启动时发出噪音。所以相机拍摄的图像(然后图像将由程序计算和处理)会被我们发出的噪音所扭曲..FLARToolKit有能力做这样的工作吗?再次感谢Joshua。非常感谢。再次:如果我用这么多问题打扰你,我道歉。对不起,我解释得不好,我的示例会考虑你想要做什么…只需将
bmd.draw(vid)
替换为bmd.draw(_composite)
(将myenterFrameHandler
函数的内容放在draw()
操作之前)。或者,您可以简单地使用FLAR注册_composite而不是bmd。