图像处理------光束效果

原理:

光束滤镜,对一幅图像完成光束效果,好似有一束光从图像本身激发出来,按照一定的角度

散发开来,光束滤镜是一种图像叠加效果,首先要借助于之前的完成的移动模糊滤镜,将一

幅图像按照一定的阈值二值化以后,加以移动模糊滤镜,将移动模糊之后的图像和原图像叠

加就产生了光束滤镜效果。

 

对光束滤镜而言,其最终效果除了移动模糊的三个参数以外,还取决于以下两个参数:

a.      图像RGB阈值的选取,建议可以直方图以后选取,程序以threshold表示

b.      光强度大小的值的选取,程序中以strength表示

 

程序运行效果如下:


关键代码解析:

计算RGB阈值代码如下– 输入的阈值范围为[0,1]

intthreshold3 = (int)(threshold*3*255);

 

求取二值像素的代码如下:

int l = r + g + b;

if (l < threshold3)

    [x] =0xff000000;

else {

l /= 3;

pixels[x] = a | (l << 16) | (l << 8) | l;

}

像素叠加乘以强度系数的代码如下(其中r,g,b分别代表RGB的三个颜色分量值):

r = PixelUtils.clamp((int)(r * strength) + r2);

g = PixelUtils.clamp((int)(g * strength) + g2);

b = PixelUtils.clamp((int)(b * strength) + b2);

光束滤镜的完全源代码如下:

[java] view plaincopy

  1. <span style="font-weight: normal;">/* 
  2. ** Copyright 2012 @gloomyfish. All rights reserved. 
  3. */  
  4.   
  5. package com.process.blur.study;  
  6.   
  7. import java.awt.image.BufferedImage;  
  8.   
  9. public class LaserFilter extends MotionFilter {  
  10.   
  11.     private float threshold = 0.5f;  
  12.     private float strength = 0.8f;  
  13.   
  14.     public LaserFilter() {  
  15.     }  
  16.   
  17.     public void setThreshold( float threshold ) {  
  18.         this.threshold = threshold;  
  19.     }  
  20.       
  21.     public float getThreshold() {  
  22.         return threshold;  
  23.     }  
  24.       
  25.     public void setStrength( float strength ) {  
  26.         this.strength = strength;  
  27.     }  
  28.       
  29.     public float getStrength() {  
  30.         return strength;  
  31.     }  
  32.       
  33.     public BufferedImage filter( BufferedImage src, BufferedImage dst ) {  
  34.         int width = src.getWidth();  
  35.         int height = src.getHeight();  
  36.         int[] pixels = new int[width];  
  37.         int[] srcPixels = new int[width];  
  38.   
  39.         BufferedImage laserImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);  
  40.   
  41.         int threshold3 = (int)(threshold*3*255);  
  42.         for ( int y = 0; y < height; y++ ) {  
  43.             getRGB( src, 0, y, width, 1, pixels );  
  44.             for ( int x = 0; x < width; x++ ) {  
  45.                 int rgb = pixels[x];  
  46.                 int a = rgb & 0xff000000;  
  47.                 int r = (rgb >> 16) & 0xff;  
  48.                 int g = (rgb >> 8) & 0xff;  
  49.                 int b = rgb & 0xff;  
  50.                 int l = r + g + b;  
  51.                 if (l < threshold3)  
  52.                     pixels[x] = 0xff000000;  
  53.                 else {  
  54.                     l /= 3;  
  55.                     pixels[x] = a | (l << 16) | (l << 8) | l;  
  56.                 }  
  57.             }  
  58.             setRGB( laserImg, 0, y, width, 1, pixels );  
  59.         }  
  60.   
  61.         laserImg = super.filter(laserImg, null );  
  62.           
  63.         for ( int y = 0; y < height; y++ ) {  
  64.             getRGB( laserImg, 0, y, width, 1, pixels );  
  65.             getRGB( src, 0, y, width, 1, srcPixels );  
  66.             for ( int x = 0; x < width; x++ ) {  
  67.                 int rgb = pixels[x];  
  68.                 int a = rgb & 0xff000000;  
  69.                 int r = (rgb >> 16) & 0xff;  
  70.                 int g = (rgb >> 8) & 0xff;  
  71.                 int b = rgb & 0xff;  
  72.                   
  73.                 int rgb2 = srcPixels[x];  
  74.                 // int a2 = rgb2 & 0xff000000;  
  75.                 int r2 = (rgb2 >> 16) & 0xff;  
  76.                 int g2 = (rgb2 >> 8) & 0xff;  
  77.                 int b2 = rgb2 & 0xff;  
  78.                   
  79.                 if ( r > 0 ) {  
  80.                     r = clamp((int)(r * strength) + r2);  
  81.                     g = clamp((int)(g * strength) + g2);  
  82.                     b = clamp((int)(b * strength) + b2);  
  83.                 } else {  
  84.                     r = r2;  
  85.                     g = g2;  
  86.                     b = b2;  
  87.                 }  
  88.   
  89.                 rgb = a | (r << 16) | (g << 8) | b;  
  90.                 pixels[x] = rgb;  
  91.             }  
  92.             setRGB( laserImg, 0, y, width, 1, pixels );  
  93.         }  
  94.   
  95.         return laserImg;  
  96.     }  
  97.       
  98.     public String toString() {  
  99.         return "Light/Laser...";  
  100.     }  
  101. }  
  102. </span>  
时间: 2024-08-03 19:18:19

图像处理------光束效果的相关文章

Photoshop中加入人造光线:制作线性光束效果

  摄影师经常是看天吃饭,晴天光线充足又柔和的清晨或旁晚是拍摄的最佳时间,专业术语叫做"Magic Hour"或者"Golden Hour".此时的光线最为柔和,色调偏暖,光影比较长(经常能看到长条形的光束),一般存在于日出后的一小时和日落前的一个小时.(除了太阳方位角较低的,离赤道较远的地区,magic hour可能持续整整一天) 那没有理想光线状态下我们该如何是好呢?可以依靠人造光源打光,后期造光等手段弥补前期拍摄的光线不足.今天我就来和大家分享一下我平时学习的

在Photoshop中加入人造光线(二):制作线性光束效果

  摄影师经常是看天吃饭,晴天光线充足又柔和的清晨或旁晚是拍摄的最佳时间,专业术语叫做"Magic Hour"或者"Golden Hour".此时的光线最为柔和,色调偏暖,光影比较长(经常能看到长条形的光束),一般存在于日出后的一小时和日落前的一个小时.(除了太阳方位角较低的,离赤道较远的地区,magic hour可能持续整整一天) 那没有理想光线状态下我们该如何是好呢?可以依靠人造光源打光,后期造光等手段弥补前期拍摄的光线不足.今天我就来和大家分享一下我平时学习的

运用OpenGL ES 2.0实现各种各样图像滤镜(图像处理)效果,多达50多种效果。

实现各种各样图像滤镜(图像处理)效果,多达50多种效果,基本囊括了最常见的图像处理效果.包括:contrast,hue,gamma,brightness,sharpness,emboss,saturation,exposure,shadow,blend等等. 由于需要用到OpenGL ES 2.0,所以,仅能在真机中测试.可以载入本地相册的照片或者直接拍照后进行照片处理. 源码下载地址:http://download.csdn.net/detail/gulaer/6576371 转载地址:htt

photoshop鼠标绘制抽象光束效果教程分享

给各位photoshop软件的使用者们来详细的解析分享一下鼠标绘制抽象光束效果的教程. 教程分享: 1.我们先来制作花纹的最基本的构成部分,如下图.   <图1> 2.新建一个1024* 768像素的文档,背景填充黑色.新建一个组,用钢笔勾出下图所示的选区,给组添加蒙版.   <图2> 3.在组里新建一个图层,选择渐变工具,颜色设置如图3,由右上角向左下角拉出线性渐变,再把图层不透明度改为:20%,效果如图4.   <图3>   <图4> 4.用钢笔勾出底部

photoshop制作森林透射光束效果教程

给各位photoshop软件的使用者们来详细的解析分享一下制作森林透射光束效果的教程. 教程分享: 原图   一. 基本调色 1.首先复制一层图层,然后开始基本的定调调色工作.这一步是基本实现你对预期效果构想的尝试.笔者对这张图的定调大概是:营造整体柔和的绿色,降低对比度(柔和的氛围),提高区域明暗对比,制作丁达尔效果,晨雾效果. 图片中,环境细节太多,层次不明显,人物不够突出.这时候首先用色阶配合蒙版提升人物的对比度,提高主体存在感.(图中用黄色的方框表示文中提到的内容).   2.随后,需要

利用Photoshop打造非常绚丽的潮流彩色飘带光束效果

最终效果 <点小图查看大图>   1.新建一个1024 * 768像素的文档,背景填充黑色,新建一个图层用套索勾出图1所示的选区,按Ctrl + Alt + D 羽化250个像素,然后选择暗蓝及暗红色把选区部分涂上底色,效果如图2.   <图1>   2.新建一个组,在组里新建一个图层,先来完成头部制作,需要完成的效果如下图.   <图3>   3.用钢笔勾出图4所示的选区,选择渐变工具,颜色设置如图5,拉出图6所示的线性渐变.   <图4>   <图

photoshop怎么利用滤镜制作抽象的火焰光束效果

 photoshop怎么利用滤镜制作抽象的火焰光束 1.创建一个新文档.我设定它大小为800×600.选择油漆桶工具(G)用黑色填充背景,而后拷贝一层图层(Cmd+J). 2.去[滤镜>渲染>镜头光晕]并且将光晕放置在合适的位置 3.重复第二步,并且再放置一个光晕到另一个你觉得合适的位置 4.转到[滤镜>像素化>铜板雕刻],类型设置为短直线.重复铜板雕刻(Cmd+F)大概三次左右.

Photoshop制作照片中绚丽的潮流光束效果

最终效果     原图 1.打开原图素材,在操作之前,大概分析一下图像的光影关系,照图图像比较合理的布光点,这里我大概的做了个光源出发点的示意图,留意红色箭头,这些位置都是比较不错的选择. 2.新建图层组,取名为"A",接着在改组新建空白图层(Ctrl + Shift + N),取名为"光源",利用画笔工具绘制一个光源,大小没有规定,适合就好,硬度为0,颜色为:#EC008C,绘制好后将光源图层混合模式改为"变亮". 3.光片的制作,绘制这个效果

Photoshop合成魔法光束场景效果制作教程

给各位Photoshop软件的使用者们来说说合成魔法光束场景效果的制作教程. 教程分享:   新建文档1500x1930像素,背景白色,打开乱石图片.   拖入文档中,位于底部.   打开山水图片.   拖入文档中,位于乱石层之上,有部分重叠.   乱石层添加蒙版,用笔刷涂抹掉远山部分.   山水图层添加蒙版,用笔刷涂抹掉上部,底部与乱石图片接壤处也涂抹掉一些,使2个图片能平滑过渡.   乱石添加色相/饱和度和亮度/对比度调整层,形成剪贴蒙版.   打开海空图片.   拖入文档中,位于背景层之上