我想在一个非常低分辨率的位图上进行仿射变换,并且我想在保留最大信息量的同时进行仿射变换。
我的输入数据是一个手写字符的1位64×64像素图像,我的输出将是灰度和更高的分辨率。在分析图像后,我构建了一系列仿射变换(旋转,缩放,剪切,平移),然后可以将它们乘以一个仿射变换矩阵。
我的问题是,给定输入图像和计算出的仿射变换矩阵,我如何才能以最高质量计算输出图像?我已经阅读了有关不同插值技术的文章,但是所有这些都是关于如何进行缩放以进行插值的,而不是关于一般仿射变换的。
这是一个演示,它正在做什么,正是我想要的。给定仿射变换矩阵和插值技术,它可以计算图像。
http://bigwww.epfl.ch/demo/jaffine/index.html
如果我具有较低分辨率的1位输入和给定的T仿射变换矩阵,您能解释一下计算较高分辨率(例如4x)灰度图像所需的步骤吗?
您能否将我链接到一些源代码或教程或文章,甚至还有书籍上,有关如何使用仿射变换实现线性,三次或更优插值?
我需要在Java中实现此问题,并且我知道Java具有Affine类,但是我不知道它是否实现插值。您是否知道任何C++或Java库最适合阅读代码以弄清楚如何编写使用插值进行仿射变换的算法?
是否有可用于Java或C++的免费库,它们具有内置函数来使用插值计算仿射变换?
最佳答案
您链接的同一个人具有带几个插值选项here的C实现。您可能使用JNI进行包装。还有JavaCV,它包装了OpenCV。 OpenCV包含具有插值的warpAffine。另外,请检查Java Advanced Imaging API here。