我想实现类似于Matlab的imwarp
的函数https://www.mathworks.com/help/images/ref/imwarp.html?requestedDomain=www.mathworks.com
SELECT DISTINCT
r.idUsera as id_usera,
t1.data_insert
FROM
rezerwacje r
LEFT JOIN
(
SELECT
m.user_id,
date(m.action_date) as data_insert
FROM
mwids m
WHERE
m.`type` = 'insert'
) t1 ON t1.user_id = r.idUsera
WHERE
r.dataZalozenia between '2016-01-01' and '2016-07-01'
and r.`status` = 'zabookowana'
ORDER BY
id_usera
这样它就会像imwarp一样(对于projective2d就足够了,不需要任何额外的东西),但只计算掩码定义的ROI。
我希望通过减少计算来减少运行时间。
如何以最有效和最优雅的方式完成这项工作?
我只是在掩码中的每个'1'上做一个for循环,然后在'im'中计算它来自哪里,然后进行插值,但我认为如果我使用了一些矩阵魔法它会慢得多
非常感谢帮助。
感谢。
答案 0 :(得分:0)
OpenCV和Matlab没有为图像变形提供遮罩,我想部分是因为它并不完全清楚在某些情况下会发生什么。例如,考虑类似
的图像170 200 120
100 230 200
70 120 20
带面具
1 1 1
1 0 1
1 1 1
一旦改变,究竟应该发生什么?你在孔上插入?或者你把它留下黑色?如果转换为较小的尺寸并且插补后的孔关闭,是否再次强行插入?它似乎很容易产生意想不到的后果,所以处理起来很奇怪,强迫某人参与其中并不是真的有意义。
当然,您可能更希望拥有一个没有漏洞的包容性区域;例如像
这样的面具0 0 1
0 1 1
1 1 1
等等,但即便如此,也可能是奇怪的。例如,旋转发生在原点周围,但如果你的掩码忽略了前几行和列,那么如果有人希望该变换参考整个原始图像或参考掩模的位置,则不完全清楚启动。
我可以很容易地看到面具的用例,但我不认为你会在大多数图书馆中看到它的实现,因为没有真正明确的正确方法,每个用例会有所不同。用一些旗帜或其他任何东西来实现并非不可能,但可能并不是一个非常需要尝试和处理这些可能性的事情。
无论如何,我看到了三种方法。
meshgrid
获取索引,然后仅将warp应用于meshgrid
的蒙版索引,并在这些点之上插入蒙版图像。我不知道是否可以使用内置函数实现这一点,因为你不能合理地创建一个带有非矩形掩码的2-D掩码图像而不插入垃圾值。所以看起来你可能需要循环才能进行插值。