相关疑难解决方法(0)

使用控制点扭曲图像

我想根据从这里提取的这个方案使用控制点转换图像:

在此输入图像描述

AB包含源目标顶点的坐标.

我正在将转换矩阵计算为:

A = [51 228;  51 127; 191 127; 191 228];
B = [152 57; 219 191;  62 240;  92 109];
X = imread('rectangle.png');
info = imfinfo('rectangle.png');
T = cp2tform(A,B,'projective');
Run Code Online (Sandbox Code Playgroud)

到目前为止它似乎正常工作,因为(使用标准化坐标)源顶点产生其目标顶点:

H = T.tdata.T;
> [51 228 1]*H
ans =
  -248.2186   -93.0820    -1.6330
> [51 228 1]*H/ -1.6330
ans =
   152.0016    57.0006     1.0000
Run Code Online (Sandbox Code Playgroud)

问题是会imtransform产生意想不到的结果:

Z = imtransform(X,T,'XData',[1 info.Width], 'YData',[1 info.Height]);
imwrite(Z,'projective.png');
Run Code Online (Sandbox Code Playgroud)

出乎意料的结果

我如何用它imtransform来产生我预期的结果?:

在此输入图像描述

有没有其他方法可以实现它?

matlab image-processing octave homography projective-geometry

13
推荐指数
1
解决办法
4756
查看次数

将捕获的坐标转换为屏幕坐标

我认为这可能是一个简单的数学问题,但我不知道现在发生了什么.

我在网络摄像头上捕捉"标记"的位置,我有一个标记及其坐标列表.四个标记是工作表面的外角,第五个(绿色)标记是小部件.像这样:

替代文字http://i37.tinypic.com/308cjtv.jpg

这是一些示例数据:

  • 左上标记(a = 98,b = 86)
  • 右上标记(c = 119,d = 416)
  • 左下标记(e = 583,f = 80)
  • 右下标记(g = 569,h = 409)
  • 小部件标记(x = 452,y = 318)

我想以某种方式将网络摄像头的小部件位置转换为坐标以显示在屏幕上,其中左上角是0,0而不是98,86并且以某种方式考虑了网络摄像头捕获的扭曲角度.

我甚至会从哪里开始?任何帮助赞赏

math image-processing linear-algebra computer-vision

11
推荐指数
2
解决办法
3763
查看次数