图像算法研究---索引图像旋转缩放锯齿问题

所谓索引图像 ,就是一种把像素值直接作为RGB调色板下标的图像,把像素值直接映射成调色板中的数值。索引图像最多只包含256种颜色,这256中颜色分别对应0-255个值,也就是256种索引值,一般的真彩图像中的实际数据都是RGB或者RGBA数据,而索引图像中的实际数据则是256种索引值,每个索引值对应一种RGB或者RGBA颜色数据,这样讲,相信大家更容易理解一点。

介绍完了索引图像,来引入今天研究的问题。

今天的问题是:索引图像的旋转与缩放

我们以旋转为例,先看一下下面几组测试:


                                         1.索引图像                                                                                                    2.32位真彩图像

                                        3.索引图像旋转45度结果


                                     4.真彩图像旋转45度结果

大家可以看到,上面的测试中,使用相同的旋转算法,但是索引图旋转后明显出现了锯齿现象。

也许你要说锯齿是因为旋转的插值算法问题造成的,这里可以告诉你,上面的测试都是在PS中进行的,使用的是双线性型插值算法。

现在我来解释出现上述结果的原因:

如果我们使用的是真彩图像,那么,图像实际数据是对应的RGBA的值,这样,我们使用插值的结果得到的也是与周围颜色相近的RGBA数据,因此,视觉上没什么差异,就像图4一样,旋转后跟旋转前的图2差不多;

如果我们使用的是索引图像,那么,图像实际数据是RGBA数据对应的索引值,这样,我们使用插值的结果得到的也是与周围索引值相近的一个索引值,注意,得到的是一个索引值,至于这个索引值对应的RGBA数据是不是与周围颜色相近,那我们就不得而知了,因此,也就出现了图3的结果,也就是说图3中,锯齿的地方,是因为插值得到的索引对应的颜色不是黑色,而是白色!

如果还不明白,我们说这样一个例子:

假如真彩图上有三个RGB数据:(200,200,200),P(R,G,B),(100,100,100),其中P是我们要插值得到的,这里我们使用平均法来计算P,那么我们得到的P应该是:

P(150,150,150),这个就是实际的RGB数据,也是我们看到的图像颜色;

假如索引图上有三个索引数据:200,P,100,这三个数据分别表示的是颜色RGB的索引,我们假设三个索引分别对应如下颜色:

200---RGB(200,200,200)

100---RGB(100,100,100)

150--RGB(255,255,255)

我们同样使用平均值法得到P:P=150,,没错,但是这里P对应的实际颜色的RGB值是(255,255,255),这个结果跟真彩图的结果(150,150,150)有着明显的颜色差异!

至此,相信大家已经很清楚了。

我们如何解决这个问题呢?

方案如下:

1,获取索引图像的调色板,也就是颜色表,这个表中记录了索引值与颜色值的对应关系;

2,按照这个颜色表,把索引图像转换为真彩图像;

3,对真彩图像进行缩放与旋转等操作;

4,按照哦1中的颜色表将真彩旋转结果转换为索引图像,这个结果即为所求。


在这个方案中,如果在步骤4中出现旋转之后的图像中的颜色值,在索引表中没有对应关系 ,那么,一般使用的是欧氏距离法,也就是计算当前颜色值与颜色表中 最接近(欧氏距离最小)的颜色值所对应的索引,以此索引作为结果索引即可。

这样就可以完美解决上述 问题了。最后给一个索引图旋转的DEMO,代码没有优化,只是说明而已:点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trent1985

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值