python opencv实现图像生成bump map凹凸贴图
bump map凹凸贴图和normal map法线贴图是计算机图形学中的重要概念,在图形渲染中应用广泛。其在图形学中具体含义可以参考:
- bump map VS normal map
- bump/normal/displacement
- 区别
bump map原理论文为:Simulation of Wrinked Surfaces
其中,B为输入的图像,Bu和Bv分别对应是图像B的u/v方向的梯度图像。即图像边缘检测中的x/y方向边缘图像。
基于python和opencv实现输入图像的bump map计算,笔者复现代码如下,欢迎大家批评指正。
def CalcBumpmap():def ConvMatrix(data, kernel):dst = cv2.filter2D(data, -1, kernel)return dstdef Rescale(data):minV = np.min(data)maxV = np.max(data)data = (data - minV) / (maxV - minV)return datadef Bumpmap(img):H,W = img.shapebumpmap = np.zeros((H,W,3))img = img.astype(np.float)kernelNx = np.array([[0, 0, 0], [0, -1, 1], [0, 0, 0]], dtype=np.float) # [0, 1, 0], [0,-1,0], [0, 0, 0]kernelNy = np.array([[0, 0, 0], [0, -1, 0], [0, 1, 0]],dtype=np.float) # [0, 0, 0], [1, -1, 0], [0, 0, 0] 按此计算效果最好Xgradient = ConvMatrix(img, kernelNx)Ygradient = ConvMatrix(img, kernelNy)Xgradient = Rescale(abs(Xgradient))Ygradient = Rescale(abs(Ygradient))bumpnorm = np.sqrt(Xgradient ** 2 + Ygradient ** 2 + 1)bumpmap[:, :, 0] = Xgradient / bumpnormbumpmap[:, :, 1] = Ygradient / bumpnormbumpmap[:, :, 2] = 1 / bumpnormreturn bumpmapimglists = glob.glob('./*.png')lens = len(imglists)plt.figure()plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.001, hspace=0.3)for img_id,item in enumerate(imglists):img = cv2.imread(item)b,g,r = cv2.split(img)b_bumpmap = Bumpmap(b)g_bumpmap = Bumpmap(g)r_bumpmap = Bumpmap(r)# bumpmap = b_bumpmap + g_bumpmap + r_bumpmapbumpmap = np.maximum(b_bumpmap,g_bumpmap,r_bumpmap)bumpnorm = np.sqrt(np.sum(bumpmap**2,axis=2))bumpmap[:, :, 0] = bumpmap[:, :, 0] / bumpnormbumpmap[:, :, 1] = bumpmap[:, :, 1] / bumpnormbumpmap[:, :, 2] = bumpmap[:, :, 2] / bumpnormbumpmap = bumpmap / 2 + 0.5 # 下限0.5,保证整体色调plt.subplot(lens,2,2*img_id+1)plt.imshow(img)plt.title(item)plt.subplot(lens,2,2*img_id+2)plt.imshow(bumpmap)plt.title(item+'-bumpmap')plt.show()
bump map转换效果如下:
图形学中bump map和normal map深刻理解还有待于之后3D Max等三维建模渲染的实践,笔者是在基于光度立体的纹理缺陷检测中了解到bump map的概念。
在图像光度学分析中,bump map定义为表面实际法向量与表面理论法向量之差,概念示意图如下:
其中:
表面实际法向量由传统光度立体方法估计得到;
表面理论法向量由被测工件的标准CAD Model数据计算得到。
python opencv实现图像生成bump map凹凸贴图相关推荐
- bump map(凹凸贴图)的一个简单生成方法
用于渲染物体表面,增加真实感的bump map(凹凸贴图)的一个简单生成方法. 1. 在 Perlin Noise Map Generator - OpenProcessing 生成一个perlin ...
- Python+OpenCV:图像修复(Image Inpainting)
Python+OpenCV:图像修复(Image Inpainting) 理论 Most of you will have some old degraded photos at your home ...
- Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features)
Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features) 理论 We know SIFT us ...
- Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)
Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...
- Python+OpenCV:图像Shi-Tomasi角点检测器
Python+OpenCV:图像Shi-Tomasi角点检测器 理论 The scoring function in Harris Corner Detector was given by: Inst ...
- Python+OpenCV:图像Harris角点检测(Harris Corner Detection)
Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...
- Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)
Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...
- Python+OpenCV:图像轮廓
Python+OpenCV:图像轮廓 轮廓是什么? 轮廓可以简单地解释为一条连接所有连续点(沿边界)的曲线,具有相同的颜色和强度. 轮廓线是形状分析.目标检测和识别的重要工具. 为了获得更好的精度,可 ...
- Python+OpenCV:图像金字塔
Python+OpenCV:图像金字塔 理论 通常情况下,我们使用固定大小的图像.但在某些情况下,我们需要处理(相同的)不同分辨率的图像. 例如,当搜索图像中的某些东西时,比如脸,我们不确定该物体在图 ...
最新文章
- bzoj1251: 序列终结者 (splay)
- [paper] multi-human parsing (MHP) (Zhao et al., 2018) dataset.
- 用dblink能修改_【学习笔记】通过修改基表(link$)让非public dblink变为public
- matlab 基于Topsis的熵权法2
- win10 jenkins svn android studio 自动化打包教程 以及一些问题的解决办法
- C实现的一个简单的学生成绩管理系统
- 首次开源!一行代码轻松搞定中英文语音识别、合成、翻译核心功能!
- OpenGL HDR曝光的实例
- [day17]appium之元素的定位
- Java中的位移运算符
- 黑匣子解密要多久_“黑匣子”揭秘
- 力扣题目系列:290. 单词规律
- 77-CCI,Commodity Channel Index,商品通道指标.(2015.7.1)
- java中instanceof是什么意思_java 中的instanceof用法详解及instanceof是什么意思(推荐)...
- 关于Tacotron2看这一篇就够了
- 厦门大学信息学院夏令营经历
- SpringBoot集成EasyExcel的使用
- python 第二天
- K近邻算法python实现并显示决策边界
- 嵌入式Linux设备驱动程序开发指南17(IIO子系统一)——读书笔记