PhotometricStereo

article/2025/10/11 3:44:36
PhotometricStereo
小强老师留下了道CMU的习题,见此题十分有趣,而且博客许久不曾更新,特把该作业奉上。作业是CV中的Photometric Stereo方面的,基本原理还是视觉领域的复原建模,详见这篇论文:
Aaron Hertzmann, Steven M. Seitz.
Example-Based Photometric Stereo: Shape Reconstruction with General, Varying BRDFs.
IEEE Transactions on Pattern Analysis and Machine Intelligence。
简言之,该实验的基本目的就是通过分析物体的一组照片来恢复该物体的三维模型。实验提供的素材照片是在一个暗室内拍摄的。基于BRDFs,将物体A与参照球体B涂上同样的涂料。固定该物体A以及参照球体B的位置,在不同角度的点光源照射下,拍摄一组照片(佳能 D40)。由于两者的表面反射率相同,光源一致,如果物体A上一点的亮度与球体B上某点的亮度相同,那么可以确定这两点具有相同的法向量。由于参照球体B的法向量已知,可以反向求得物体A各个象素点的法向量,通过法向量复原就可以恢复物体A的三维模型。
实验环境:Matlab 7.0
图片素材:
l         8张bottle的照片以及8张球体sphere的照片,分别拍摄于不同角度点光源照射条件下。
l         bottlemask照片一张,spheremask照片一张。用于截取图像的有用部分。
程序步骤:
1.       编写creatObjectVectors函数,用于读取8张bottle或者8张球体sphere形成一个8×M的向量矩阵。提示显示该函数每回仅读取RGB三个通道中的一个分量。但是为了避免麻烦,以及提高KD匹配的准确性,我每回读取了3个通道,这样就形成了一个24×M的向量矩阵。在这里我也用到了mask图片,用于仅仅读取照片有用部分的灰度值,而其他部分的灰度值则全部置零。这样做是为了提高KD匹配的速度。
2.       分别读取物体A的向量组以及参照球体B的向量组。
PixA = creatObjectVectors(TargetImageName,NumberOfImages,ColorIndex);
PixB = creatObjectVectors(RefImage,NumberOfImages,ColorIndex);
利用K-D树匹配具有相同法向量的各个象素点,通过实验发现K-D树的匹配效率还是很高的,有待进一步研究利用。
IDX=kdtreeidx2(PixB, PixA);
3.       利用surfnorm函数求得参照球体各点的法向量矩阵Rnormal。同样利用mask图片,用于仅仅计算照片有用象素点的法向量值,而其他象素点的法向量值则全部置零。
4.       利用IDX数组与Rnormal矩阵,反推求得物体A的法向量矩阵Normal。
5.       牛人Todd Zickler(Yale University)提供的integrability2函数恢复物体A的三维模型。
6.       由实验结果看来,有些地方还是不够精确,比如瓶体的纹路以及瓶底的底座轮廓。需要进一步细化精确。
 

http://chatgpt.dhexx.cn/article/W0jsTHO8.shtml

相关文章

Free-Form Image Inpainting with Gated Convolution

CVPR 2020的一篇文章 解读一下题目: - free form 自由形式 - image inpainting 图像补全 - gated convolution 门控卷积该文章提出了一个,缺失区域为自由形式的图像补全情况的解决方法,针对该方法提出了一个门控卷积的方法。 模型结构图…

Deep Image Prior

Deep Image Prior 摘要 深度卷积网络已经成为图像生成和重建的常用工具。人们猜想,他们优秀的表现是归功于他们能够从大量图像样本中学习到真实图像先验的能力。而相反,本文中作者展示生成网络在经过任何学习之前就能够捕获大量的低级图像统计信息&…

Automatic Trimap Generation for Image Matting

Automatic Trimap Generation for Image Matting翻译 Abstract image matting 是计算摄影中的一个重要问题。虽然已经研究了二十多年,但是开发一种不需要人工干预的自动matting算法仍然是一个挑战。大多数最先进的matting算法都需要人工干预,以trimap或涂…

Self-augmented Unpaired Image Dehazing via Density and Depth Decomposition程序运行记录

论文题目: 《Self-augmented Unpaired Image Dehazing via Density and Depth Decomposition》 作者列表: 杨洋(天津大学),王超岳(悉尼大学),刘日升(大连理工大学),张…

Learning Continuous Image Representation with Local Implicit Image Function

1. 简介 文章简称为LIIF,即Local Implicit Image Function,受到了3D视觉里场景或物体的隐式表示思想的启发,主要的想法便是把正常的图像当做是连续的,用神经网络表示这个图像之后,对于图像上的每一个像素点其实就当做…

【InternImage】Exploring Large-Scale Vision Foundation Models with Deformable Convolutions

基于Deformable Conv的大规模基础模型 特点: 采用Deformable Conv V3 【v2 19论文】CNN模型 背景 大规模的ViT模型借助模型能力在超大规模数据集上取得了非常高的性能,然而大规模CNN模型研究才刚刚开始。 近期CNN研究倾向于使用大的卷积kernel&#…

ImageMol

ai圈也是卷的狠啊~~ 又发现一个全球首个分子图像自监督学习框架来也 分子是维持物质化学稳定性的最小单位。对分子的研究,是药学、材料学、生物学、化学等众多科学领域的基础性问题。 分子的表征学习(Molecular Representation Learning)是…

Morphological image processing

目录 基本思想: 一.集合论基础 1.集合的概念 2.集合间的关系和运算 二.二值形态学的基本运算 1.腐蚀 (1)概念 (2)结构元素形状对腐蚀运算结果的影响 (3)腐蚀运算在物体识别中的应用 2…

实用的图片批量压缩优化工具

ImageOptim ImageOptim 支持 PNG/JPEG/GIF 动画,本质是各种影像优化工具的图形前端:AdvPNG、OptiPNG、Pngcrush、JpegOptim、jpegtran、Gifsicle 和 PNGOUT素材。 ImageOptim软件非常小! 2.6M而已ImageOptim操作非常非常非常快捷&#xff01…

【UNI APP】globalData全局变量

uni-app 在app.vue文件export default里面定义globalData,在当前文件(app.vue)里面获取globalData需要用this.$options.globalData获取,其他文件则用getApp().globalData获取。 this.$options是用来获取自…

uniapp 全局数据(globalData)的设置,获取,更改

因为uniapp基本上都是将页面,或者页面中相同的部分,进行组件化,所以会存在父,子,(子,父)之间的传值的情况,但在某些情况下,可以选择将内容设置为一个全局的变…

微信小程序定义和调用全局变量globalData

先看看文件结构: 1.现在app.js里面定义globalData对应的全局变量 2.然后在其他js文件进行调用。例如在photo.js里面 要注意的是需要在文件开始的时候初始化 app这个对象 //获取应用实例 const app getApp()

微信小程序:globalData和Storage数据存储的错误示例

前言 在小程序登录是,将返回的用户数据,存储在globalData中和storage中。 // 存储的数据是一个对象 wx.setStorageSync(userAuthData, user.data.data); this.globalData.userAuthData user.data.data; 之前,数据更新了,为了避…

uni-app之全局变量globalData的使用

一般访问请求的时候,baseurl我们都会用变量来代替,所以我们一半会把大量这种常用的,但是又不会经常变动的数据变成一个常量--globalData export default {onLaunch: function() {},onShow: function() {console.log(App Show)},onHide: function() {console.log(App Hide)},glo…

微信小程序中的共享数据 : globalData

和vue中的vuex作用相同,都是用于设置给所有页面都可以使用的数据的。 globalData在app.js中,它是一个对象,在里面设置要使用到的共享数据。 我们在其他页面要使用globalData中的数据时,首先如下: let app getApp() …

在uniapp中监听globalData中的值变化

小程序里怎么去监听app.js里的globalData数据变化呢 1、先再app.vue 中定义一个全局数据对象globalData,再对象里定义好相应的属性与属性值 globalData:{count:0 },methods:{watch:function(method,istr){var objthis.globalDataconsole.log(obj)Objec…

微信小程序中全局共享数据globalData的使用

1.全局共享数据 全局共享数据的两种方式 通过Vue原型共享数据通过globalData共享数据vuex本地存储 1)在Vue实例原型属性上添加属性,其他任何页面预想使用,直接使用this获取到, 比如: 主要代码:(在入口文件mian.js中) import request from ./utils/request Vue.prototype.re…

Vue全局共享数据之globalData,vuex,本地存储使用方法

目录 一、globalData 二、vuex存储方式 1.vue2用法,2.vue3用法 三、本地存储 uniapp的数据缓存 写在最前面,把vue能用到的存储方法都整理拿出来,方便阅读以及工作用。🍉🍉🍉可以收藏起来即拿即用 Vue全局共…

微信小程序 | 12.生命周期、globalData全局数据

文章目录 1.小程序的生命周期2.全局数据globalData3.globalData的应用3.1.搭配app.js的onLaunch()存储openid3.2.轮询globalData3.2.1.问题描述 3.2.2.解决方式:轮询globalData 1.小程序的生命周期 小程序生命周期(onLaunch、onShow、onHide、onReady、onLoad、onU…

uniapp 全局静态数据(globalData)的修改和使用

uniapp 全局静态数据(globalData)的修改和使用 全局静态数据: 在App.vue中的调用: this.globalData.systemTitle在App.vue中的修改: this.globalData.systemTitle res.title在pages中调用: let title…