中位切分算法,一种图像获取多种主题色的方法

        网络上关于中位切分算法的简述有很多,在这我也用自己的理解讲述一次,做一次学习的记录。这次可能会比较啰嗦。

一、明确目的:

        这算法的最终目的是为了获取图像N个主题色。(如本例子是求出4个主题色)

二、核心流程:

        第一步:rgb数组重新排序(目的为了第二步的切分做准备)

        第二步:从排序后的的rgb数组一切为二(灵魂所在,为了让数组一分二,二分四,如此下去)

        第三步:递归第一步和第二步

        第四步:递归结束,计算切分后的N个数组的平均值或中位数

三、图示:

        1)第一步,排序。(目的让相似但分散在各像素的颜色靠拢在一起)

        排序的原理是根据rgb其中一个通道(后面会说怎样选出来)来重新排序。

       我们首先要明白基础,rgb是一个数值,三个颜色通道,如红色0xff0000,可以表达(ff,00,00),图片是由多个像素组成,一个像素显示出一个rgb值。

每行像素首尾相连,形成一行长长的数组。 

         选出根据哪个颜色通道的排序,原理是比较rgb各自的长度,最长的通道为比较标准,如选出了红色通道red。

 得出颜色比较标准后,重新排序

2)第二步,中位切分(目的是平均分成两半)

        即将数组平均分成两半,假如该图片数组有400个数值,排序后,分成前半的200个为一组数组,后200个为另一个新数组。

3)第三步,递归第一步和第二步(目的是最终分成主题色数量一致的子数组)

        如上例,新分出的两个数组(前200个,后200个),各自重复第一步的排序,排序后,又到第二步,中位切分,即200再分为前100个,后100个,这时就有4个数组,各自的大小为100。

        一分二,二分四....递归到最后的子数组数量为主题色的数量就停止递归,如上图,我要求4个主题色,递归到4个子数组就结束 。

4)第四步,求出主题色

现在每个子数组就是一个主题色,求出各子数组的r、g、b平均值,然后合成新的颜色(也有人直接拿数组的中值)

 

猜你喜欢

转载自blog.csdn.net/qq_15260099/article/details/127379610