计算成像(Computational Imaging)是一类成像系统,它从不完善的物理测量和关于被成像的场景类别的先验知识开始,将特定场景的估计传递给成像系统[1-7]。使用计算得到的图像而不是直接使用原始强度图像是因为后者可能不容易解释。信息可能在那里,但不完整或者隐藏在数据中,需要进一步的处理来补充和揭示它。计算成像的思维方式也为光学设计开辟了新的方向,因为它消除了传统的要求,即原始图像本身必须遵守与对象相关的空间一致性和保真度。因此,在形成原始图像之前,不再需要完全纠正所有的像差。某些校正可分配给系统的计算部分。更重要的是,有了计算成像,就有可以创建光学系统,生成在空间上故意不符合各自场景的原始图像。这样做的目的是,形成在传统的空间一致性强度图像中不容易得到的表现形式,如x射线层析成像,从投影数据中重建物体的内部。

聚焦堆栈是聚焦在不同成像平面的图像序列[8-9],即在某一视角下,拍摄一组聚焦在不同平面的二维照片。聚焦堆栈成像系统可以看作是光场的离散化采样的一种方式,可以通过采集一组不同聚焦面的图像结合反投影来计算重建光场。相比于通过阵列型和微透镜复用的光场相机,不需要置入新的光学器件,具有成本低,分辨率高,可实现对实际场景的灵活采集等优势。

由聚焦堆栈重建光场与CT重建类似。引入SART算法经典的迭代重建算法进行重建。介于全网(主要包括github等开源代码库)都没有典型小例子,新手入门有门槛,因此博主花了1天时间,复现了聚焦堆栈重建光场的sart小例子,
其中:

  • 光场数据来自新HCI数据集
  • 关于光场数据生成聚焦堆栈数据(shift-and-add)是正投影过程,可参考光场的可视化与重聚焦原理(附重聚焦代码),该博客写的非常不错。
  • 关于光场的介绍可参考一、光场(Light Field)是什么?
  • 聚焦堆栈数据可以看成光场数据的离散化采集,聚焦堆栈和光场的采集以及光场的可视化方式可参考二、光场数据的采集及可视化
  • 本博客代码以及数据可从github下载
clear; clc; close
%% 相关参数设置
angRes                = 9;  % angular resolution
h                     = 512;
w                     = 512;
maxIte                = 2;  % 最大迭代次数
lambda                = 0.8; % 松弛因子
dispmin               = -1.7;
dispmax               = 2.0;
d                     = 0.2;
Ang                   = dispmin:d:dispmax; % 聚焦堆栈对应的视差层
nbFS                  = length(Ang);% 聚焦堆栈的个数
%% 读取光场数据
path = '.\town\';
files = dir(fullfile( path,'*.png'));
for u = 1 : angResfor v = 1 : angResk = (u-1)*angRes+v;I = imread([path, files(k).name]);LF(u,v,:,:) =rgb2gray(im2double(I));end
end
%% 生成聚焦堆栈数据--对视差进行划分
k=1;
% 系统矩阵
angRes_r=floor(angRes/2);
y=repmat((1:w),h,1); x=repmat((1:h)',1,w);
oi=repmat((-angRes_r:angRes_r),angRes,1);
oj=repmat((-angRes_r:angRes_r)',1,angRes);for alpha = dispmin:d:dispmax    temp=zeros(h,w);for u=1:angResfor v=1:angResI=squeeze(LF(u,v,:,:));tmp=(u-1)*angRes+v;yj=y+alpha*oj(tmp); xi=x+alpha*oi(tmp);temp=temp+min(max(interp2(yj,xi,I,y,x,'LINEAR',0),0),1); end        endFS(k,:,:)=temp./(angRes*angRes);k=k+1;
end
%% 加载聚焦堆栈数据
% path = '..\Data\';
% files = dir(fullfile( path,'*.png'));
% nbFS= length(files);
% for k= 1 : nbFS
%     I = imread([path, files(k).name]);
%     FS(k,:,:) =rgb2gray(im2double(I));
% end
%% 反投
outLF=zeros(angRes,angRes,h,w);
for ite = 1: maxIte%迭代次数IdxAng = randperm(nbFS);%随机角度
%     IdxAng = 1:nbFS;%按顺序for k = 1: nbFS% 正投影--------------------------------------------------alpha = Ang(IdxAng(k));temp = zeros(h,w);for u = 1:angResfor v = 1:angResI = squeeze(outLF(u,v,:,:));tmp = (u-1)*angRes+v;yj = y+alpha*oj(tmp); xi = x+alpha*oi(tmp);FS_temp=interp2(yj,xi,I,y,x,'LINEAR',0);temp=temp+min(max(FS_temp,0),1); end        endtemp = temp./(angRes*angRes);% 求残差--------------------------------------------------delta = squeeze(FS(IdxAng(k),:,:)) - temp;% 更新----------------------------------------------------for u = 1:angResfor v = 1:angResI = squeeze(LF(u,v,:,:));tmp = (u-1)*angRes+v;          yj = y+alpha*oj(tmp); xi = x+alpha*oi(tmp);LF_temp=interp2(y,x,delta,yj,xi,'LINEAR',0)./nbFS;outLF(u,v,:,:)=squeeze(outLF(u,v,:,:))+lambda.*LF_temp; end        endoutLF=min(max(outLF,0),1);figure(1),imshow(squeeze(outLF(5,5,:,:)), []), title(['第' num2str(ite) '轮迭代:  ' num2str(k)]),pause(1);  end
end

参考文献:

[1]. N. Wiener and E. Hopf , “Uber eine Klasse singulaerer Integralgeichungen , ” Sitzungsber. Preuss. Akad. Math.-Phys. Kl. 31,696–706 (1931).
[2]. N. Wiener, Extrapolation, Interpolation, and Smoothing of Stationary Time Series (Wiley, 1949).
[3]. A. N. Tikhonov, “On the solution of ill-posed problems and the method of regularization,” Dokl. Akad. Nauk SSSR 151, 501–504 (1963).
[4]. A. N. Tikhonov, “On the regularization of ill-posed problems,” Dokl. Akad. Nauk SSSR 153, 4 9–52 (1963).
[5]. M. Bertero and P. Boccacci, Introduction to Inverse Problems in Imaging (Institute of Physics, 1998).
[6]. D. J. Brady, Optical Imaging and Spectroscopy (Wiley, 2009).
[7]. J. Mait, G. W. Euliss, and R. A. Athale, “Computational imaging,” Adv.Opt. Photon. 10, 409–483 (2018).
[8] A. Mousnier, E. Vural, and C. Guillemot, “Partial light field tomographic reconstruction from a fixed-camera focal stack,” arXiv:1503.01903 (2015).
[9] A. Levin and F. Durand, “Linear view synthesis using a dimensionality gap light field prior,” in IEEE Conference on Computer Vision and Pattern Recognition (CVPR), San Francisco, CA, 2010, pp. 1831–1838.

聚焦堆栈重建光场-SART实现(附代码)相关推荐

  1. fread读结构体返回值是0无错误_嵌入式C编程之错误处理(附代码例子)!

    原标题:嵌入式C编程之错误处理(附代码例子)! 作者: clover-toeic 前言 本文主要总结嵌入式系统C语言编程中,主要的错误处理方式.文中涉及的代码运行环境如下: 一.错误概念 错误分类 从 ...

  2. 降维算法总结(超全!附代码)

    降维算法总结(超全!附代码) 一.为什么要进行数据降维? 二.数据降维原理 三.主成分分析(PCA)降维算 PCA代码实现 四.其他降维算法及代码地址 效果总览及代码地址 KPCA(kernel PC ...

  3. 推荐系统入门(七):新闻推荐实践2(附代码)

    推荐系统入门(七):新闻推荐实践2(附代码) 目录 推荐系统入门(七):新闻推荐实践2(附代码) 引言 数据收集 数据存储 数据分析 实战 总结 参考资料 引言 相关系列笔记: 推荐系统入门(一):概 ...

  4. python pdfminer linux 版本下载_Python利器 PDFMiner python实现PDF转换TXT(附代码)

    PDFMiner其特征有: 1.完全使用python编写.(适用于2.4或更新版本) 2.解析,分析,并转换成PDF文档. 3.PDF-1.7规范的支持.(几乎) 4.中日韩CJK语言和垂直书写脚本支 ...

  5. 基于PaddleHub的AI人脸侦测:不再用手打灰机(附代码)

    项目实现: 用摄像头做人脸识别 判定头部角度,以此来进行游戏控制 所有代码和相关文件可在github中自取: github: planegame_head_control 效果展示请见B站: 一.项目 ...

  6. Python利器 PDFMiner python实现PDF转换TXT(附代码)

    PDFMiner其特征有: 1.完全使用python编写.(适用于2.4或更新版本) 2.解析,分析,并转换成PDF文档. 3.PDF-1.7规范的支持.(几乎) 4.中日韩CJK语言和垂直书写脚本支 ...

  7. matlab光场成像,光场相机重聚焦原理③——Matlab光场工具包使用重聚焦及多视角效...

    光场相机重聚焦原理③--Matlab光场工具包使用重聚焦及多视角效 光场相机重聚焦原理③--Matlab光场工具包使用.重聚焦及多视角效果展示 目录 1.从相机里导出白图像(White Images) ...

  8. Get了!用Python制作数据预测集成工具 | 附代码

    作者 | 李秋键 责编 | 晋兆雨 大数据预测是大数据最核心的应用,是它将传统意义的预测拓展到"现测".大数据预测的优势体现在,它把一个非常困难的预测问题,转化为一个相对简单的描述 ...

  9. java中自造类是什么意思_Java建造者模式是什么?如何实现?(附代码)

    本篇文章给大家带来的内容是关于Java建造者模式是什么?如何实现?(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 建造者模式 一.什么是建筑者模式? 建造者模式(Build ...

  10. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

最新文章

  1. STL库(C++11)提供的异步执行方法的方式
  2. ShakeDrop:深度残差学习中的 ShakeDrop 正则化
  3. c语言程序与设计第三版-苏小红--第一轮学习笔记、难点整理
  4. polardb mysql 事务隔离级别_事务的四种隔离级别
  5. java池模式_JAVA模式 对象池 简要代码示例
  6. systemctl 管理服务命令
  7. 谈谈多年的创业之路和网络生涯
  8. Java人工弱智算法_人工智障也刷题!Kaggle 入门之实战泰坦尼克号
  9. APP离线后,通过SystemClock.elapsedRealtime()校正时间
  10. 树莓派高阶课程7:树莓派博通BCM2835芯片手册导读
  11. 万丈高楼平地起,开始给Java打地基
  12. 10月12日棉花期货投资
  13. 华为2019开发者大会内容小记
  14. 根据IMSI区别运营商
  15. 算法之排序算法(冒泡法和选择法)
  16. EXCEL利用正则匹配去替换内容
  17. 老闪创业那些事儿(40)——倒霉的光哥
  18. 切换到kali linux的第一篇记录备份
  19. 完美解决 - 前端发版后浏览器缓存问题(发版后及时拉取最新版本代码)
  20. Mybatis的动态SQL

热门文章

  1. 服务器同时传回html和图片,【待解决】木疙瘩导出HTML代码后,部署到自己的服务器上,也按照教程解决了微信签名的问题,但是上传图片功能不能用,为何?...
  2. 计算机一级考试题库基础知识,计算机一级考试题库(含答案)
  3. ddr3ddr4 lpddr4速率_LPDDR3一定弱?实测对比单双通道DDR4
  4. python dlib caffe人脸相似度_人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIBOpenCV人脸检测方法及对比)...
  5. 当你的MS OFFICE打不开时,安全模式也失效,来看我给你变戏法吧
  6. 有道云笔记Markdown图片链接解决办法
  7. 未来已来,如何成为一名人工智能产品经理
  8. python如何使用sdk_如何通过Python访问Kvaser CANlib 软件开发包|Kvaser CANlib SDK的应用...
  9. python做生物信息学分析_Python从零开始第五章生物信息学⑤生存分析(log-rank)
  10. php进销存bom,金太郎进销存带你了解BOM物料清单