图像融合,把像素大小相同,拍摄位置相同的照片通过一定方式进行融合。下面介绍几种简单的图像融合方式。

1、通过对应像素均值进行融合。这种融合方式可用于处理亮度变换较大的图片,由于相机测光和成像水平有限,对于成像范围内阴暗部分和明亮部分往往处理不好,要保证阴暗部分,则会导致明亮部分过曝;要保证明亮部分成像,则会导致阴暗部分太暗。对于这种情况,一种是采用较低的曝光参数保证明亮部分不过曝,通过调整亮度显示出阴影部分,再通过均值合并生成图像。第二种方法是通过相机拍摄,相机采用三脚架固定位置,用不同曝光参数进行拍摄,拍摄完成后将几张影像进行均值合并。

另外,某些“鬼影”照片其实也是用类似方式合成的。

代码:

public BufferedImage imageCombineByAverage(List<BufferedImage> images) {       BufferedImage tempImage = new BufferedImage(images.get(0).getWidth(), images.get(0).getHeight(), images.get(0).getType());for(int i = 0; i < images.get(0).getWidth(); i++) {for(int j = 0; j < images.get(0).getHeight(); j++) {int R = 0,G = 0,B = 0;for(BufferedImage image : images) {int rgb = image.getRGB(i, j);int r = (rgb >> 16) & 0xff;int g = (rgb >> 8) & 0xff;int b = rgb & 0xff;R += r;G += g;B += b;}int aveR = R / images.size();int aveG = G / images.size();int aveB = B / images.size();int RGB = (255 & 0xff) << 24 | (clamp(aveR) & 0xff) << 16 | (clamp(aveG) & 0xff) << 8 | clamp(aveB) & 0xff;tempImage.setRGB(i, j, RGB);}}   return tempImage;}

2、通过对应像素值求和。适用于亮度很暗的场景,由于在亮度很低的场景下,采用高ISO可能会产生很多噪点,可以通过较低的曝光参数,固定相机位置,采用多次拍摄,对多张照片进行对应位置像素值求和的方式提高亮度和画质。

另外也可以用于对影像进行特征提取或边缘提取后,将处理后的特征点、线图像与原图进行合并。

public BufferedImage imageCombineByAddAll(List<BufferedImage> images) {        BufferedImage tempImage = new BufferedImage(images.get(0).getWidth(), images.get(0).getHeight(), images.get(0).getType());for(int i = 0; i < images.get(0).getWidth(); i++) {for(int j = 0; j < images.get(0).getHeight(); j++) {int R = 0,G = 0,B = 0;for(BufferedImage image : images) {int rgb = image.getRGB(i, j);int r = (rgb >> 16) & 0xff;int g = (rgb >> 8) & 0xff;int b = rgb & 0xff;R += r;G += g;B += b;}int RGB = (255 & 0xff) << 24 | (clamp(R) & 0xff) << 16 | (clamp(G) & 0xff) << 8 | clamp(B) & 0xff;tempImage.setRGB(i, j, RGB);}}  return tempImage;}

3、最低值合并。

public BufferedImage imageCombineByMin(List<BufferedImage> images) {       BufferedImage tempImage = new BufferedImage(images.get(0).getWidth(), images.get(0).getHeight(), images.get(0).getType());for(int i = 0; i < images.get(0).getWidth(); i++) {for(int j = 0; j < images.get(0).getHeight(); j++) {List<Integer> rList = new ArrayList<>();List<Integer> gList = new ArrayList<>();List<Integer> bList = new ArrayList<>();for(BufferedImage image : images) {int rgb = image.getRGB(i, j);int r = (rgb >> 16) & 0xff;int g = (rgb >> 8) & 0xff;int b = rgb & 0xff;rList.add(r);gList.add(g);bList.add(b);}Collections.sort(rList);Collections.sort(gList);Collections.sort(bList);int minR = rList.get(0);int minG = gList.get(0);int minB = bList.get(0);int RGB = (255 & 0xff) << 24 | (clamp(minR) & 0xff) << 16 | (clamp(minG) & 0xff) << 8 | clamp(minB) & 0xff;tempImage.setRGB(i, j, RGB);}}    return tempImage;}

java图像处理之图像融合相关推荐

  1. [Python图像处理] 五.图像融合、加法运算及图像类型转换

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  2. python图像处理:图像融合

    python图像处理:基于图像金字塔的动态图像融合 效果 原理 高斯金字塔 差分金字塔(拉普拉斯金字塔) 重构与融合 代码 效果 话不多说,先看实际效果. 熊猫为主图,苹果为融入源. 保留熊猫的边缘信 ...

  3. 图像处理系列——图像融合之色彩变换1(IHS)

    谈到色彩变换融合算法,我们首先想到一般就是IHS变换融合算法了.其实色彩变换融合算法有很多种,根据其所用的颜色模型不同,会有不同的融合算法,比如HSV.HLS.IHLS等.当然超球体色彩空间变换(HC ...

  4. java图像处理之图像裁剪

    图像裁剪即截取原始图像某一部分生成一幅新的图像,某些app也会要求用户将上传图像进行一定程度裁剪来作为头像.图像裁剪实现起来比较简单,下面介绍两种裁剪方式,矩形裁剪和圆形裁剪. 矩形裁剪,定义图像上某 ...

  5. [Python从零到壹] 三十七.图像处理基础篇之图像融合处理和ROI区域绘制

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  6. 如何使用Python实现图像融合及加法运算

    本文分享自华为云社区<[Python图像处理] 五.图像融合.加法运算及图像类型转换>,作者:eastmount. 本篇文章主要讲解Python调用OpenCV实现图像融合及加法运算,包括 ...

  7. matlab将二值图像与原图重叠_[转载]图像处理matlab及图像融合图像镶嵌图像拼接...

    在实际的对图像处理过程中,由于我们读出的图像是unit8型,而在MATLAB的矩阵运算中要求所有的运算变量为double型(双精度型).因此读出的图像数据不能直接进行相加求平均,因此必须使用一个函数将 ...

  8. Java OpenCV-4.0.0 图像处理22 图像模板匹配

    Java OpenCV-4.0.0 图像处理22 图像模板匹配 参考链接:https://blog.csdn.net/qq_34814092/article/details/95813654 Java ...

  9. VTK修炼之道16:图像处理_窗口分割和图像融合(ViewportvtkImageBlend)

    1.前言 前面演示的例子都是在一个窗口中显示一个图像.但是在常见的图像处理软件中,经常会遇到在一个窗口中显示多个图像,这就会用到图像融合技术.图像融合利用图像的alpha通道和不透明度来实现.VTK中 ...

最新文章

  1. [转] vuewebpack多页面配置
  2. 技术工坊|解密区块链DApp的代码逻辑,从请求到数据存储都要经历什么?(上海)...
  3. web安全之信息刺探防范(上)
  4. 进程间通信 - 命名管道实现
  5. 查询缓存---Mybatis学习笔记(十)
  6. 三菱d700变频器模拟量控制_PLC和变频器:开关量控制和模拟量控制什么区别?...
  7. LeetCode 205. 同构字符串(哈希map)
  8. java 创建进程_Linux下创建进程简介
  9. 安卓ondraw刷新视图_android播放动画时是否会调用被操作的视图的onDraw方法?
  10. 真的假的?LiFi或将取代WiFi
  11. arcgis交通可达性分析步骤_可达性分析(二):基于Network Analys的服务区分析
  12. LLVM CLANG 3.1 GCC 4.7 INTEL CORE I7 BENCHMARKS
  13. 百战c++(数据库2)
  14. 丢番图生平编程java_丢番图
  15. vue如何在一个工程里判断h5还是pc,(利用在一个页面显示不同router-view内容原理,本文只使用于单页面项目,多页面项目请查看我另一篇博文)
  16. 今天面完了聚成网络的php研发,面经一枚,为自己攒人品。
  17. windows android双系统,劲爆!Windows与Android双系统成功合体
  18. 哪几款蓝牙耳机音质最好?音质好的蓝牙耳机测评
  19. 虚拟机RedHatEenterpriseLinux5安装及Oracle10.2.0安装手记
  20. java+决策树结构_机器学习——决策树,DecisionTreeClassifier参数详解,决策树可视化查看树结构...

热门文章

  1. pacificA架构介绍
  2. 洛谷——P1056 排座椅
  3. 博主新书:《大数据日知录:架构与算法》目录
  4. CSS3之border
  5. leetcode[217].存在重复元素
  6. apache php mysql下载_linux+apache+php+mysql 安装
  7. c语言函数的程序设计,C语言程序设计第3版,第6章函数程序设计.ppt
  8. 一个女程序员的第七年工作总结
  9. MySQL不使用逗号_Mysql 不能使用逗号的情况
  10. linux删除目录是显示非空,Linux删除非空目录