我试图在MATLAB中将一个图像转换为另一个图像,同时也从此操作中获取转换函数T(x,y)
(例如T(x,y) = (x + a(x,y), y + b(x,y))
)。我们使用下面的图作为例子。我想将第一个图中的方块转换为另一个图中的圆,输出给我一个变换函数,所以每当我在方块上使用该函数时,我都会得到圆。
我调查的功能:
我已经研究过imwarp,但它应该只用于几何变换(缩放,旋转,剪切)。我不认为这在将正方形转换为圆形时很有用,而不是预先提供任何变换矩阵。
我已经研究过使用MATLAB imregconfig中的imregister和example,但它似乎只适用于结构相同但强度不同的图像。另外,它没有给出任何转换功能。如果我错了,请纠正我。
提前感谢您的帮助!
答案 0 :(得分:0)
有效转换的解决方案空间是无限的。我们如何选择"权利"一个?
这些输入的一种可能转换是翻译-0.5
中的x
和-0.5
中的y
。然后将其缩放为尺寸的两倍(x' = 2x
,y' = 2y
)并应用square-to-circle mapping function。 (解决方案1)
另一个完全有效的转换函数可以通过表达式
运行输入中的所有点 ( (x == 0 || x == 1) && (0 <= y <= 1) || ( (y == 0 || y == 1) && (0 <= x <= 1) )
如果所有点都通过,只需打印出"x^2 + y^2 = 1"
即可。 (解决方案2)
解决方案(1)和(2)都产生似乎满足您所呈现的情况的代码,但显然(2)非常一般无用。我认为在我们开始在代码中编写解决方案之前,您需要更准确地定义问题。