FishEye图片效果(桶式失真)算法(使用Java)?

时间:2011-02-12 12:23:50

标签: java image-processing fisheye distortion

我正在寻找算法(位图像素操作)来模拟正常图片中的鱼眼镜头(Barrel Distortion)。到目前为止,我已经发现涉及OpenCV,OpenGL或jhlabs等外部库的实现。由于我正在参加数字图像处理课程并且正在进行课程评估项目,我不确定使用任何外部库是否会让我获得好成绩。那么有人会给我这样的算法参考吗?

聚苯乙烯。我被要求用Java实现它,但是任何语言的例子都可以。

3 个答案:

答案 0 :(得分:6)

您能够找到满足您需求的示例,这很好。将它们包含在您的问题中会很有帮助 - 它确保阅读它的人与您在同一页面上。所以这是一个link

你想要自己做事,而不依靠某些图书馆来为你做艰苦的工作,这也很好。但这并不意味着你必须忽略这样的解决方案。这就是原因。

查看that link中实际使用的OpenCV。这些函数以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调用。

答案 1 :(得分:3)

答案 2 :(得分:0)