首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内插仿射变换

内插仿射变换
EN

Stack Overflow用户
提问于 2011-10-22 21:01:35
回答 2查看 3.7K关注 0票数 4

我想在一个非常低分辨率的位图上做仿射变换,我想在保持最大信息量的同时做它。

我的输入数据是1位64乘64像素的手写字符图像,我的输出将是灰度和更高的分辨率。在分析图像的基础上,构造了一系列仿射变换(旋转、缩放、剪切、平移),并将它们相乘成一个仿射变换矩阵。

我的问题是,给定输入图像和计算出的仿射变换矩阵,如何以尽可能高的质量计算输出图像?我读过关于不同插值技术的文章,但它们都是关于如何为缩放而进行插值,而不是一般的仿射变换。

这是一个演示,正在做的正是我正在寻找的。给出了仿射变换矩阵和插值技术,计算了图像。

http://bigwww.epfl.ch/demo/jaffine/index.html

,如果我有一个低分辨率的1位输入和给定的T仿射变换矩阵,你能解释计算高分辨率(例如4x)灰度图像所需的步骤吗?

你能把我链接到一些源代码教程,文章,,甚至书籍,关于如何用仿射变换实现线性、三次或更好的插值吗?

我需要在Java中实现这个问题,而且我知道Java有一个仿射类,但是我不知道它是否实现了插值。您知道有什么C++或Java库可以很好地阅读代码来理解如何编写使用插值进行仿射变换的算法吗?

是否有可免费使用的Java或C++库,这些库具有内建的函数,可以使用插值计算仿射变换?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-29 13:44:55

好的,这是我最后得到的解决方案。

  1. 我将所有数组转换为BufferedImage对象 静态BufferedImage BImageFrom2DArray(浮点数据){ int宽度= data.length;int高度= data.length;BufferedImage myimage =新BufferedImage(宽度、高度、BufferedImage.TYPE_INT_RGB);for (int x= 0;x<宽度;x++) { for (int y= 0;y< height;y++) { int值= (int) (1f- datax) *255 F);myimage.setRGB(y,x,( << 16)值)x(值<< 8) \x}返回myimage;}
  2. 利用插值双三次AffineTransformOp实现仿射变换 AffineTransformOp op =新AffineTransformOp(tx,AffineTransformOp.TYPE_BICUBIC);BufferedImage im_transformed = op.filter(im_src,null);
  3. 将BufferedImage对象转换回数组: 静态浮点数ArrayFromBImage(BufferedImage b映像,int宽度,int高度){ int max_x = bimage.getWidth();int max_y = bimage.getHeight();浮点数数组=新浮点数;for (int x= 0;x< width;x++) { for (int y= 0;y< height;y++) {浮红,α,值;int颜色;若(x >= max_x x >= max_y) { arrayy = 0;}max_y{bimage.getRGB= bimage.getRGB(x,y);α=(色>> 24) & 0xFF;红色=(颜色>> 16) & 0xFF;值= 1f - red / 255;如果(alpha == 0) { arrayy = 0;} else { arrayy =值;}返回数组;}
票数 1
EN

Stack Overflow用户

发布于 2011-10-22 21:56:58

同样的人,你链接到有一个C实现与几个插值选项这里。你也许可以用JNI包起来。还有JavaCV,它封装了OpenCV。OpenCV包含有内插的warpAffine。另外,请查看Java高级成像 API 这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7862583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档