图像处理:如何在目的地上掩盖蒙版

时间:2017-07-05 07:10:52

标签: python image matlab opencv image-processing

我想实现类似于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'中计算它来自哪里,然后进行插值,但我认为如果我使用了一些矩阵魔法它会慢得多

非常感谢帮助。

感谢。

1 个答案:

答案 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
等等,但即便如此,也可能是奇怪的。例如,旋转发生在原点周围,但如果你的掩码忽略了前几​​行和列,那么如果有人希望该变换参考整个原始图像或参考掩模的位置,则不完全清楚启动。

我可以很容易地看到面具的用例,但我不认为你会在大多数图书馆中看到它的实现,因为没有真正明确的正确方法,每个用例会有所不同。用一些旗帜或其他任何东西来实现并非不可能,但可能并不是一个非常需要尝试和处理这些可能性的事情。

无论如何,我看到了三种方法。

  1. 翘曲后过滤掉彩色遮罩区域。
  2. 扭曲反转遮罩位置本身并从移动这些像素的扭曲图像中删除所有内容。
  3. 使用meshgrid获取索引,然后仅将warp应用于meshgrid的蒙版索引,并在这些点之上插入蒙版图像。我不知道是否可以使用内置函数实现这一点,因为你不能合理地创建一个带有非矩形掩码的2-D掩码图像而不插入垃圾值。所以看起来你可能需要循环才能进行插值。