bump map凹凸贴图和normal map法线贴图是计算机图形学中的重要概念,在图形渲染中应用广泛。其在图形学中具体含义可以参考:

  1. bump map VS normal map
  2. bump/normal/displacement
  3. 区别

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凹凸贴图相关推荐

  1. bump map(凹凸贴图)的一个简单生成方法

    用于渲染物体表面,增加真实感的bump map(凹凸贴图)的一个简单生成方法. 1. 在  Perlin Noise Map Generator - OpenProcessing 生成一个perlin ...

  2. Python+OpenCV:图像修复(Image Inpainting)

    Python+OpenCV:图像修复(Image Inpainting) 理论 Most of you will have some old degraded photos at your home ...

  3. Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features)

    Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features) 理论 We know SIFT us ...

  4. Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)

    Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...

  5. Python+OpenCV:图像Shi-Tomasi角点检测器

    Python+OpenCV:图像Shi-Tomasi角点检测器 理论 The scoring function in Harris Corner Detector was given by: Inst ...

  6. Python+OpenCV:图像Harris角点检测(Harris Corner Detection)

    Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...

  7. Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)

    Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...

  8. Python+OpenCV:图像轮廓

    Python+OpenCV:图像轮廓 轮廓是什么? 轮廓可以简单地解释为一条连接所有连续点(沿边界)的曲线,具有相同的颜色和强度. 轮廓线是形状分析.目标检测和识别的重要工具. 为了获得更好的精度,可 ...

  9. Python+OpenCV:图像金字塔

    Python+OpenCV:图像金字塔 理论 通常情况下,我们使用固定大小的图像.但在某些情况下,我们需要处理(相同的)不同分辨率的图像. 例如,当搜索图像中的某些东西时,比如脸,我们不确定该物体在图 ...

最新文章

  1. bzoj1251: 序列终结者 (splay)
  2. [paper] multi-human parsing (MHP) (Zhao et al., 2018) dataset.
  3. 用dblink能修改_【学习笔记】通过修改基表(link$)让非public dblink变为public
  4. matlab 基于Topsis的熵权法2
  5. win10 jenkins svn android studio 自动化打包教程 以及一些问题的解决办法
  6. C实现的一个简单的学生成绩管理系统
  7. 首次开源!一行代码轻松搞定中英文语音识别、合成、翻译核心功能!
  8. OpenGL HDR曝光的实例
  9. [day17]appium之元素的定位
  10. Java中的位移运算符
  11. 黑匣子解密要多久_“黑匣子”揭秘
  12. 力扣题目系列:290. 单词规律
  13. 77-CCI,Commodity Channel Index,商品通道指标.(2015.7.1)
  14. java中instanceof是什么意思_java 中的instanceof用法详解及instanceof是什么意思(推荐)...
  15. 关于Tacotron2看这一篇就够了
  16. 厦门大学信息学院夏令营经历
  17. SpringBoot集成EasyExcel的使用
  18. python 第二天
  19. K近邻算法python实现并显示决策边界
  20. 嵌入式Linux设备驱动程序开发指南17(IIO子系统一)——读书笔记

热门文章

  1. 从 Notion 分片 Postgres 中吸取的教训(Notion 工程团队)
  2. Atlas 200 DK
  3. 元数据管理工具Atlas学习笔记之使用
  4. 修改 TeamViewer ID 的方法
  5. nyoj 145 聪明的小珂
  6. LeetCode160.相交链表
  7. python基础——数据类型
  8. 计算机毕业设计=基于微信小程序的停车场管理系统
  9. css发动机的机滤,机油滤芯
  10. ,什么叫他妈的惊喜?