java - 鱼眼图片效果(桶形失真)算法(用Java)?

标签 java image-processing fisheye distortion

我正在寻找从普通图片中模拟鱼眼镜头(桶形失真)的算法(位图像素处理)。到目前为止,我发现实现涉及外部库,如 OpenCV、OpenGL 或 jhlabs。由于我正在上数字图像处理类(class)并且正在进行类(class)评估项目,因此我不确定使用任何外部库是否会给我一个好成绩。那么谁能给我这样的算法引用呢?

附言。我被要求用 Java 实现它,但任何语言的示例都可以。

最佳答案

很高兴您能够找到符合您要求的示例。将它们包含在您的问题中会很有帮助——它可以确保阅读它的人与您在同一页面上。所以这是一个link .

您想自己做事,而不是依赖某些库来为您完成繁重的工作,这也很好。但这并不意味着您必须忽略此类解决方案。原因如下。

看看 OpenCV 在 that link 中的实际用途.这些是以 cv 开头的函数:

$ grep -o "cv\\w*" barrel.cpp | sort | uniq
cv
cvCreateImage
cvGet2D
cvGetSize
cvLoadImage
cvNamedWindow
cvSaveImage
cvSet2D
cvShowImage
cvWaitKey

如果您查看 OpenCV API ,所有这些功能都只是处理普通的任务,如图像创建、删除、显示、像素设置等。这些任务都不是桶形失真所特有的。就桶形失真而言,该解决方案不是特定于 OpenCV 的

的确,程序的核心就在这里:

float getRadialX(float x,float y,float cx,float cy,float k){
  x = (x*xscale+xshift);
  y = (y*yscale+yshift);
  float res = x+((x-cx)*k*((x-cx)*(x-cx)+(y-cy)*(y-cy)));
  return res;
}

float getRadialY(float x,float y,float cx,float cy,float k){
  x = (x*xscale+xshift);
  y = (y*yscale+yshift);
  float res = y+((y-cy)*k*((x-cx)*(x-cx)+(y-cy)*(y-cy)));
  return res;
}

这只是径向变换公式——这是您需要了解的部分。如您所见,其中没有 OpenCV 调用。

关于java - 鱼眼图片效果(桶形失真)算法(用Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4978039/

相关文章:

java - Java正则表达式需要新鲜的眼光,这太贪婪了

c++ - opencv 从缓冲区读取 jpeg 图像

python - 如何使用 openCV python 将图像的蒙版部分替换为另一个图像?

java - 灰度图像算法在多线程时比顺序慢

opencv - 在数学上将全画幅鱼眼转换为等距柱状

opencv - 使用鱼眼镜头undistortPoints时断言失败

java - 如何修复 HAPI 早期连接关闭警告?

java - java中优先级队列中offer()和add()的区别?

java - Java 对话框弹出框中的随机图像

javascript - Fisheye Distortion 插件的奇怪行为