图像处理之半调色融合

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

图像处理之半调色融合


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


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


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


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


算法基本思想:


读取纹理图像像素点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);
  }
}
相关文章
网络基础之三
网络基础之三
454 0
|
4月前
|
自然语言处理 数据可视化 安全
关于CMS?CMS的核心概念与分类简介
CMS为非技术人员提供内容管理,支持多用户协作、模板统一和本地化适配,涵盖通用、垂直及企业级类型,适应不同场景需求。
489 2
|
9月前
|
XML Java 数据库连接
MyBatis的常见配置
MyBatis 常见配置包括数据库连接、类型别名、映射器等核心模块,合理配置可提升开发效率与系统性能。主要内容涵盖核心配置文件结构、关键配置项详解及配置优先级说明。
807 4
|
人工智能 并行计算 测试技术
从商业海报到二次元插画多风格通吃!HiDream-I1:智象未来开源文生图模型,17亿参数秒出艺术大作
HiDream-I1是智象未来团队推出的开源图像生成模型,采用扩散模型技术和混合专家架构,在图像质量、提示词遵循能力等方面表现优异,支持多种风格生成。
1295 2
从商业海报到二次元插画多风格通吃!HiDream-I1:智象未来开源文生图模型,17亿参数秒出艺术大作
|
传感器 机器学习/深度学习 数据采集
2022年第十一届认证杯数学中国数学建模国际赛小美赛:C 题 对人类活动进行分类 建模方案及代码实现
本文提供了2022年第十一届认证杯数学中国数学建模国际赛小美赛C题"对人类活动进行分类"的建模方案和Python代码实现,包括数据预处理、特征提取、LSTM网络模型构建和训练评估过程。
524 11
2022年第十一届认证杯数学中国数学建模国际赛小美赛:C 题 对人类活动进行分类 建模方案及代码实现
|
11月前
|
机器学习/深度学习 负载均衡 C++
MoR vs MoE架构对比:更少参数、更快推理的大模型新选择
本文将深入分析递归混合(MoR)与专家混合(MoE)两种架构在大语言模型中的技术特性差异,探讨各自的适用场景和实现机制,并从架构设计、参数效率、推理性能等多个维度进行全面对比。
663 0
MoR vs MoE架构对比:更少参数、更快推理的大模型新选择
|
SQL 人工智能 前端开发
JeecgBoot 低代码平台 v3.7.4 发布,后台架构大升级
JeecgBoot 是一款基于 SpringBoot2.x/3.x 和 SpringCloud Alibaba 的企业级 AI 低代码平台,采用前后端分离架构(Ant Design & Vue3),支持 Mybatis-plus 和 Shiro。它集成了强大的代码生成器,可一键生成前后端代码,无需手动编写,大幅减少重复工作。平台支持 DeepSeek、ChatGPT 和 Ollama 等主流大模型,提供 AI 对话
942 9
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南

热门文章

最新文章