图像处理之半调色融合

简介: 图像处理之半调色融合

图像处理之半调色融合


图像处理中错误扩散,抖动算法在在数字半调技术中有着重要的应用,是报纸,黑白


打印机等输出设备常常采用的技术。常见的图像半调技术有矩阵错误扩散,弗洛伊德-


斯坦德伯格错误扩散,空间填充曲线采样错误扩散等。本文借助半调算法,实现两张


图像的融合,将背景纹理融合到目标图像中,创造惊艳的图像处理效果。


算法基本思想:


读取纹理图像像素点P(x,y)与目标图像对应像素D(x,y),输入参数调节S取值范围[0~1]


根据参数S计算颜色差值cs = S * 255,假设像素值分别为P(x, y) =mv, D(x, y) = dv


则融合后的像素值pd(x, y)=255*(1-3x^2 - 2x^3)其中x = (mv - (dv - cs)/2cs)


运行效果:

1351258422_1662.png


errno-404.png



背景图像分别为:


1351258670_6046.jpg


1351258543_6403.jpg


程序源代码:

package com.gloomyfish.filter.study;
 
import java.awt.image.BufferedImage;
 
/**
 * A filter which uses a another image as a ask to produce a halftoning effect.
 */
public class HalftoneFilter extends AbstractBufferedImageOp {
  
  private float softness = 0.1f;
  private boolean invert;
  private BufferedImage mask;
 
  public HalftoneFilter() {
    System.out.println("Stylize/Halftone...");
  }
 
  /**
   * Set the softness of the effect in the range 0..1.
   * @param softness the softness
     * @min-value 0
     * @max-value 1
   */
  public void setSoftness( float softness ) {
    this.softness = softness;
  }
  
  /**
   * Get the softness of the effect.
   * @return the softness
     * @see #setSoftness
   */
  public float getSoftness() {
    return softness;
  }
  
  /**
   * Set the halftone background image.
   * @param BufferedImage maskImage
     * @see #getMask
   */
  public void setMask( BufferedImage maskImage ) {
    this.mask = maskImage;
  }
  
  public void setInvert( boolean invert ) {
    this.invert = invert;
  }
 
    public BufferedImage filter( BufferedImage src, BufferedImage dst ) {
        int width = src.getWidth();
        int height = src.getHeight();
 
        if ( dst == null )
            dst = createCompatibleDestImage( src, null );
    if ( mask == null )
      return dst;
 
        int maskWidth = mask.getWidth();
        int maskHeight = mask.getHeight();
 
        // scale to [0~255]
        float s = 255*softness; 
 
    int[] inPixels = new int[width];
    int[] maskPixels = new int[maskWidth];
 
        for ( int y = 0; y < height; y++ ) {
      getRGB( src, 0, y, width, 1, inPixels ); // get row pixels
      getRGB( mask, 0, y % maskHeight, maskWidth, 1, maskPixels ); // get row pixels
 
      for ( int x = 0; x < width; x++ ) {
        int maskRGB = maskPixels[x % maskWidth];
        int inRGB = inPixels[x];
        if ( invert )
                    maskRGB ^= 0xffffff;
 
        // start to halftone here!!
                int ir = (inRGB >> 16) & 0xff;
                int ig = (inRGB >> 8) & 0xff;
                int ib = inRGB & 0xff;
                int mr = (maskRGB >> 16) & 0xff;
                int mg = (maskRGB >> 8) & 0xff;
                int mb = maskRGB & 0xff;
                int r = (int)(255 * (1-cubeInterpolation( ir-s, ir+s, mr )));
                int g = (int)(255 * (1-cubeInterpolation( ig-s, ig+s, mg )));
                int b = (int)(255 * (1-cubeInterpolation( ib-s, ib+s, mb )));
                inPixels[x] = (inRGB & 0xff000000) | (r << 16) | (g << 8) | b;
                
            }
 
      setRGB( dst, 0, y, width, 1, inPixels );
        }
 
        return dst;
    }
    
  public static float cubeInterpolation(float a, float b, float x) {
    if (x < a)
      return 0;
    if (x >= b)
      return 1;
    x = (x - a) / (b - a);
    return x*x * (3 - 2*x);
  }
}
相关文章
|
8月前
|
算法 计算机视觉
图像处理之仿油画效果
图像处理之仿油画效果
32 0
|
算法 安全 机器人
Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的拉普拉斯算法增强(C#)
Baumer工业相机堡盟工业相机如何联合BGAPISDK和OpenCVSharp实现图像的拉普拉斯算法增强(C#)
150 0
|
9月前
|
传感器 机器学习/深度学习 自动驾驶
【多模态融合】CRN 多视角相机与Radar融合 实现3D检测、目标跟踪、BEV分割 ICCV2023
本文介绍使用雷达与多视角相机融合,实现3D目标检测、3D目标跟踪、道路环境BEV分割,它是来自ICCV2023的。CRN,全称是Camera Radar Net,是一个多视角相机-雷达融合框架。 通过融合多视角相机和雷达的特性,生成语义丰富且空间精确的BEV特征图。实现3D物体检测、跟踪和BEV分割任务。
843 1
|
9月前
|
机器学习/深度学习 传感器 编解码
【多传感器融合】BEVFusion: 激光雷达和摄像头融合框架 NeurIPS 2022
BEVFusion提出一个融合多摄像头和激光雷达数据的框架,可用于3D检测。在自动驾驶领域,通过独立处理并融合摄像头和激光雷达数据,可以显著提升3D对象检测的准确性和稳健性,尤其是在激光雷达可能出现故障的真实场景中。
2173 0
【多传感器融合】BEVFusion: 激光雷达和摄像头融合框架 NeurIPS 2022
|
传感器 算法 开发工具
Baumer工业相机堡盟万兆网相机如何在联合Halcon中对图像进行平场校正功能(Halcon)
Baumer工业相机堡盟万兆网相机如何在联合Halcon中对图像进行平场校正功能(Halcon)
274 0
|
算法 安全 机器人
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的直方图算法增强(C#)
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的直方图算法增强(C#)
106 0
|
算法 安全 机器人
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的线性灰度变换Emphasize 算法增强(C#)
Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的线性灰度变换Emphasize 算法增强(C#)
114 0
|
监控 算法 vr&ar
鱼眼矫正,实时视频与3D的融合案例分享
#鱼眼摄像头画面矫正及与3D融合 鱼眼摄像头是一种广角镜头,捕捉的视频画面呈现出弯曲或球形。通过鱼眼矫正算法,可以将鱼眼相机拍摄的视频转换为更接近于标准透视的视频,使用户能够直接获得更自然的视频效果。 经过鱼眼矫正后的实时视频,适用于与3D场景实时融合,即视频孪生 = 视频+数字孪生。 视频孪生是现阶段数字孪生的天花板。将分散、割裂的实时视频在数字孪生世界中做三维还原,虚实共生,虚实互补,为用户提供立体、直观、实时真实的动态的系统。只有通过动态的视频,才能实现真正的虚实共生。
470 0
|
传感器 机器学习/深度学习 人工智能
多传感器融合 | CenterFusion:毫米波雷达和相机后融合3D检测算法
本文主要介绍一种基于毫米波雷达和相机后融合的3D目标检测算法——CenterFusion,原本是公司内部的一个技术方案,截取了其中的核心理论部分,所以看起来肯能有些严肃。
多传感器融合 | CenterFusion:毫米波雷达和相机后融合3D检测算法
|
计算机视觉
图像增强—彩色增强技术
图像增强—彩色增强技术

热门文章

最新文章