Lab04

xiaoxiao2021-02-27  619

Lab04 直方图均衡化

    首先了解目的是使直方图的统计图灰度值尽可能均匀分布,考虑到,累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。同时可以达到像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒的目的,用一个新数组来新储存像素值的话,原来的像素点的像素值一样,现在还是一样, 而且新数组是一个累积递增函数,原来像素大的话,在新数组的下标大对应该像素的值,也比较大。所以所有像素点的相对大小都没有变,除了255最后到达255像素值的一些点可能会有数据丢书,同时也达到了灰度子啊概率空间较为均匀分布的效果。

OPENCL 设计

    在main函数中,先得到灰度图的直方图次数统计,作为一个参数,传入到opencl 计算的内核当中。在内核中,根据一个range二维的globalThreads,来得到并行计算中,当前的线程要计算的点在原图中的对应坐标,确定灰度值,然后根据输入的代表灰度直方图的数组,来得到目前灰度以前的累计次数和,归一化后,计算出该灰度值,在均衡化后的新值。返回给dest_data buffer,最后从device考回host内存,得到新图片的数组矩阵。

实验结果

原图

直方图均衡化

问题

    我不知道是虚拟机的问题,还是我的问题,一样的代码,我之前弄了78个小时,一直是运行段错误,包括利用gdb进行debug也只是报了说一些不知名的.so文件出错,make clean等都尝试过,反复检查,都不知道哪里,结果我新建一个文件夹,但仍然用之前一样的代码,直接就有结果了,这个就比较恶心了。。还有就是注意存图片的类型uchar,0-255,但是直方图累计分布的过程,像素点很多,可能会很大,需要开成int数组等。

转载请注明原文地址: https://www.6miu.com/read-226.html

最新回复(0)