老猿最近在进行OpenCV直方图均衡学习,发现书中一个神奇的处理机制:通过图像img计算生成直方图,然后生成该直方图的CDF,然后根据CDF进行直方图均衡处理,得到原直方图灰度值到均衡后直方图灰度值的一个映射表CDFTable,该CDFTable是一个numpy的一维数组,共计256个元素,其中CDFTable[i]表明将原图像灰度值i映射为CDFTable[i],有了这个表之后,真正的图像映射只有一个语句:
img2 = cdf[img]
就这样简单一个语句,将img图像中所有灰度值按照映射关系进行了变换,得到了结果图像img2。
这个机制基于上面的介绍已经很清楚了,下面提供一个简单案例:
import numpy as np
def test():
m = np.array([[[1,2,3],[1,2,3],[1,2,3]],[[4,5,6],[4,5,6],[4,5,6]],[[7,8,9],[7,8,9],[7,8,9]]],dtype=np.uint8)
l = np.array([19,18,7,6,5,4,3,2,1,0])
m2 = l[m]
print(m2)
test()
输出结果:
[[[18 7 6]
[18 7 6]
[18 7 6]]
[[ 5 4 3]
[ 5 4 3]
[ 5 4 3]]
[[ 2 1 0]
[ 2 1 0]
[ 2 1 0]]]
本文介绍了numpy数组元素值的高效查表映射机制,在使用该机制时,老猿总结有如下要点:
l = np.array(['9','a18.8','ll',6,5,4,3,2,1,0])
;结果表 = 映射表[被映射表]
的形式使用。关于这个知识点,老猿在网上找了半天没有找到相关的介绍,连这种查表映射机制是否有其他名字都不知道。是否还有除以上介绍内容之外的其他方式的映射?不知道哪位大侠可以提供一下资料?或者还有更神奇的numpy使用方法?如果能答疑解惑,不胜感激。
关于图像直方图处理的内容请参考《《数字图像处理》第三章学习总结感悟2:直方图处理》的介绍。
更多图像处理请参考专栏《OpenCV-Python图形图像处理》及《图像处理基础知识》的介绍。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《 专栏:Python基础教程目录》从零开始学习Python。
如对文章内容存在疑问,可在博客评论区留言,或关注:老猿Python 微信公号发消息咨询,可通过扫博客左边的二维码加微信公众号。
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。