图像算法研究---索引图像旋转缩放锯齿问题
所谓索引图像 ,就是一种把像素值直接作为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,代码没有优化,只是说明而已:点击打开链接
图像算法研究---索引图像旋转缩放锯齿问题相关推荐
- 图片(旋转/缩放/翻转)变换效果(ccs3/滤镜/canvas)
以前要实现图片的旋转或翻转,只能用ie的滤镜来实现,虽然canvas也实现,但ie不支持而且不是html标准. css3出来后,终于可以用标准的transform来实现变换,而canvas也已成为ht ...
- PixiJS案例——移动旋转缩放
简介: 对于选择的图片进行,移动.旋转.缩放.使用 hammer.js 做拖拽操作. 思路: 使用pixi创建一个canvas 添加一个需要移动的精灵 使用hammer做拖拽.双指旋转和缩放 素材: ...
- [cocos2d-x]图层的旋转缩放效果
要实现一个两个图层叠加在一起,然后点击其中的一个图层,实现另外一个图层的旋转缩放的效果. 预期效果: 1.实现两个layer添加在一个场景中. 2.实现点击一个场景能实现另一个场景的旋转缩放的功能. ...
- 图像中的一条直线在旋转缩放过程中会有分段现象,或产生分段节点
图像中的一条直线在旋转缩放过程中会有分段现象. 图像在Windows照片查看器中打开.显示. 使用滚轮放大缩小. 原来的一条直线会分段. 图像旋转方式:16相位(33端).32 原图: 经旋转45,放 ...
- 图片的旋转,缩放和拖拽
由于之前公司项目的原因,我被要求完成一个头像上传功能,其中包括要实现上传图片的旋转,缩放和拖拽,更关键的是要用JS实现... 作为一个不大喜欢用JS的人来说这是一个很严峻的挑战,不过随着项目的进行我的 ...
- Unity3D使用鼠标旋转缩放平移视角
Unity使用鼠标旋转缩放平移视角 用代码在Game界面完美实现Scene界面的操作方法. 使用方法:把脚本挂在相机上,把跟踪的target拖到脚本上. 视角跟踪的是一个空物体,当然如果你是做RPG游 ...
- 用矩阵表示图形旋转缩放变换
二维图形 1.缩放 假设x和y都缩小到0.5倍 那新的x' = 0.5x 新的y' = 0.5y 我们现在通用化一下,假设x方向缩放为Sx,y方向缩放为Sy,并且用矩阵的方法可表示如下 -1 < ...
- OpenGL相机自由移动旋转缩放,四元数,欧拉角,LookAt
OpenGL相机自由移动旋转缩放,四元数,欧拉角,LookAt 定义相机 摄像机位置 右轴 上轴 Look At 自由移动相机 左右移动 移动速度 视角移动 欧拉角 通过欧拉角计算实际的方向向量 缩放 ...
- unity 3D模型展示旋转缩放
目标: 在UI层上 自由观察3D 模型,实现鼠标控制模型的旋转,缩放&& 触摸屏手势控制模型的旋转缩放控制: 这里仅将控制代码挂载到相机上,通过对相机的控制来观察模型. 基本上为最小单 ...
最新文章
- 洛谷P1074 靶形数独(跳舞链)
- 成都python工作-成都找工作|成都人才网|成都全职招聘信息-成都58同城
- 浅谈STM32的DMA模块的使用
- 添加事件的兼容性写法
- (背)顺序容器的操作-向容器中插入元素详细总结
- 利用ffmpeg进行摄像头提取视频编码为h264通过RTP发送数据到指定的rtp地址
- python grep awk_文本处理三剑客:grep、sed和awk命令介绍
- GB35114—④、附 录A、B
- 2022年美赛C题M奖思路复盘(附代码、附论文)
- PHP 获取微视无水印源地址_如何提取获取下载美拍、微视、微拍等手机视频
- 网站服务器 80端口吗,你的服务器打开IIS80端口了吗?
- 毕业论文html代码查重吗,毕业论文中的代码内容重复了怎么办? 毕业论文代码重复率高...
- Grounded theory相关知识
- datetime的时值
- 【ESP01S】使用串口调试助手,发送AT指令收回的是乱码/重复一遍AT指令发回的问题
- windows7自带摄像头拍照摄像软件
- 【NOIP模拟赛】小猫爬山
- Codeforces Round #644 (Div. 3) E.Polygon
- SpringBoot:Whitelabel Error Page 404
- 进博抢先看 | 辉瑞、默沙东、强生、GSK、西门子医疗、蔡司、霍尼韦尔、江森自控、阿迪达斯、迪卡侬、乐高等将亮相第五届进博会...
热门文章
- 记一次操作系统实验测试
- R语言学习笔记6_非参数的假设检验
- 密码学基本原理和发展——近代密码学
- 完爆基金经理?ChatGPT炒股,一年多回报率超500%
- RHEL环境搭建--Nginx|Tomcat|Java|Dubbo|RabbitMQ|Redis|Nexus|MySQL
- 车用能源的终极:氢能车落地普及还要多久?
- 安装macports
- DARWIN Survival of the Fittest Fuzzing Mutators读论文笔记
- 5、目标检测评估指标
- python求加权平均值的方法(附纯python写法)