Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在每个强度级别中分布相等数量的像素_Arrays_Matlab_Image Processing_Histogram - Fatal编程技术网

Arrays 在每个强度级别中分布相等数量的像素

Arrays 在每个强度级别中分布相等数量的像素,arrays,matlab,image-processing,histogram,Arrays,Matlab,Image Processing,Histogram,我必须做以下事情- 1查找属于intensity-level-0到intensity-level-255的像素,并将其存储在256个数组中 2将像素从一个强度级别重新分配到另一个强度级别,以便所有256个级别的像素相等 这是我试图解决的一个更大问题的算法,我被困在这里,因为我不知道如何操作单元格数组元素 我将在单元数组中有256个单元,我必须比较和重新分配属于单个单元的元素。请Matlab专家帮助。算法非常简单。从二维图像矩阵创建一个一维数据数组。数组的每个元素都有四个属性: x位 y位置 [0

我必须做以下事情-

1查找属于intensity-level-0到intensity-level-255的像素,并将其存储在256个数组中 2将像素从一个强度级别重新分配到另一个强度级别,以便所有256个级别的像素相等

这是我试图解决的一个更大问题的算法,我被困在这里,因为我不知道如何操作单元格数组元素


我将在单元数组中有256个单元,我必须比较和重新分配属于单个单元的元素。请Matlab专家帮助。

算法非常简单。从二维图像矩阵创建一个一维数据数组。数组的每个元素都有四个属性:

x位 y位置 [0255]上的强度值 每个像素的优先级默认为零 现在,根据此数据生成一个直方图,其中的值位于256个唯一存储箱中的一个,基于强度值。这应该很容易

现在,只需计算每个容器中应包含的元素的平均数量,即:rows*columns/256,并将其四舍五入到最接近的整数。有了这个值,您就知道每个直方图箱中应该有多少像素。因此,在柱状图中,您:

循环遍历256个直方图箱中的前255个 计算存储箱中的值数是否高于或低于平均值。 如果当前箱子中的像素太多: 按优先级值对每个箱子中的像素进行升序排序,即:从0开始;优先级越高,移动像素的可能性越小。 取优先级最低的像素,并将像素上移到下一个位置,即:增加其强度值,并增加其优先级值。 重复此操作,直到当前箱子中的像素数等于预期值,即:行*列/256。 您可能会在最后一个存储箱(存储箱255,即第256个存储箱)中有太多的项目。您可以通过在直方图上重复上述算法来解决这一问题,但相反。不过,这一次,按优先级降序排列像素。因此,优先级值越高,移动它的可能性就越大。当您这次移动此像素时,您将同时降低其强度值和优先级,而不是增加它们。 现在直方图已均衡,您可以循环浏览其内容以重新创建原始2D图像

优先级值很重要,因此您不会意外地将像素移动到超过需要的位置,从而导致高斯噪声甚至脉冲/椒盐噪声。 整个算法应该在^2上,因此就性能而言,它应该是相当不错的一半


最后一件事:如果您使用的排序算法不是稳定的排序,它或多或少会随机化在存储单元之间移动相同值的像素,这很有帮助,可以防止移动具有相同强度值的相邻像素簇。

听起来很像?这就是你想要的吗?如果你有图像处理工具箱,你想要histeq,这为你做了整个事情。是的,直方图均衡,但它的结果直方图必须在不使用任何内置函数的情况下手动变平。我已经成功地完成了这样的累积直方图均衡,但我不知道如何继续以手动方式均匀分布像素。逻辑是计算像素数,将它们除以256,在每个强度级别必须有许多像素。下面是完整的算法。