Algorithm 如何正确平滑图像的色调?

Algorithm 如何正确平滑图像的色调?,algorithm,image-processing,Algorithm,Image Processing,假设您在某种颜色空间中有一个图像,具有类似色调的通道,即固有的圆形通道。 例如,在典型的HSL或HSV频道中,0或256的色调都对应于完全相同的颜色,通常是纯红色,而255则稍微偏蓝,但仍然几乎是纯红色。 现在,如果你,比方说,在这样一个通道上,沿着一条0和255接触的线,应用高斯模糊,你将“平滑”整个通道,在穿过整个彩虹的两个红色之间形成一个梯度这一结果几乎肯定是不理想的 第二个问题是由于亮度/值和/或饱和度为0的奇点,在这种情况下,色调在技术上可能具有任意值。-大多数颜色空间转换只是在转换颜

假设您在某种颜色空间中有一个图像,具有类似色调的通道,即固有的圆形通道。
例如,在典型的HSL或HSV频道中,0或256的色调都对应于完全相同的颜色,通常是纯红色,而255则稍微偏蓝,但仍然几乎是纯红色。
现在,如果你,比方说,在这样一个通道上,沿着一条0和255接触的线,应用高斯模糊,你将“平滑”整个通道,在穿过整个彩虹的两个红色之间形成一个梯度这一结果几乎肯定是不理想的

第二个问题是由于亮度/值和/或饱和度为0的奇点,在这种情况下,色调在技术上可能具有任意值。-大多数颜色空间转换只是在转换颜色空间时选择0的色调,因为对于几乎所有常见的用例来说,这都无关紧要。但如果我要模糊,它绝对是模糊的

一个典型的高斯模糊算法必须如何改变才能正确处理至少(更重要的)第一个问题,理想情况下也是第二个问题

我假设第二个更难,不能仅使用色调通道,而是需要其他两个通道的信息来处理奇点的特殊情况,但希望有一些合理的简单调整来修复第一个

如果答案需要一个特定的算法,一个简单快速的好方法就是使用重复的盒卷积近似,例如

为了方便起见,这里是该站点的复制+粘贴,执行三个水平和三个垂直的框卷积:

函数gaussBlur_4(scl、tcl、w、h、r){ var bxs=boxesForGauss(r,3); boxBlur_4(scl,tcl,w,h,(bxs[0]-1)/2); boxBlur_4(tcl,scl,w,h,(bxs[1]-1)/2); boxBlur_4(scl,tcl,w,h,(bxs[2]-1)/2); } 功能盒Blur_4(scl、tcl、w、h、r){
对于(var i=0;i,请停留在色调颜色空间中,并使用循环数据统计,请参阅或


高斯滤波器只是一个卷积滤波器,所以基本上是一个加权平均值。所以在这样的颜色空间中,你只需使用加权循环平均值:它是通过将每个值/角度分解为sin/cos来计算的,然后对sin/cos进行平均,然后返回到角度/值。

我认为没有人会理解你的第二段