这是一篇关于色彩和谐化的工作,可以根据图片的HSV空间中H色相的值进行改变颜色,使得原图更加美观。
文中使用色相环,预定义了8种模板
模板中的中心位置说的是扇形区域的中间那条线是在哪个地方(顺时针偏移),默认垂直向上的是0,eg 0.25 则是说的中心线在正东方向。而宽度是不变的,也就是灰色的扇形区域的大小是不变的,变得就只是中心线的位置,相当于在绕着中心点旋转。
这个是相当于损失函数,里面的||*||代表了弧长,意思是让像素的色相值尽可能接近模板本身,
算法思路是,先固定模板,然后优化alpha,之后根据每个模板和对应的alpha计算F也就是损失值,找到最小的那一组(m, alpha)就是我们最终使用的。
为了解决在色相环形图中出现两个区域,图像空间上相邻的像素被分到不同区域的情况,也就是上图中间孔雀的脖子颜色不一致的问题,引入了二值分割算法,使用的是graph-cut方法,给每个像素一个标签0或者1决定他们是被分到哪一个色相环形图的区域中。
文章中的graph-cut直接用比较耗时,可以用opencv中的超像素就代替,可以加速,具体流程为:先不看颜色的连续性,单纯计算每个像素的色相到哪个扇形区域最近,先为每个像素单独打标签,然后再统计opencv划分的每个超像素块里面的像素标签哪个多,就把当前超像素的标签置为谁。这就保证了颜色又连续,每个颜色被压缩的距离又最小,色差变化不会太大。
最后一步就是改变颜色了,也就是上面的公式,物理含义就是我们知道了每个像素P要压到哪一个区域,那么我们根绝这个P的色相和中心色相的距离来修改,距离越大,越远离中心,距离越小越接近中心。
输入一个图像X,没有图中的每一个像素都得到他的色相,找到和模本库种最匹配的模板,通过recolor进行颜色改变,其中为了保持图像空间中的连续性,使用了给予graph-cut的超像素分割技术,相邻的像素使其落到同一个色相里面。
参考:
http://www.websiteoptimization.com/speed/tweak/color-harmony/
https://blog.yuzhenyun.me/harmonization/
https://blog.youkuaiyun.com/zb1165048017/article/details/104023061 这里面有一个代码是notebook可以看看