如何计算距离"两个矩形之间?

时间:2018-02-19 14:17:01

标签: algorithm image-manipulation

给定一个矩形和一堆图像(也是矩形),我需要找到放置在其中的最佳图像。那将需要较少的拉伸或收缩,并覆盖该区域最好的那个。我想找到目标矩形距离最小(如在最小变换中)的那个。图像是网站的屏幕截图,因此,它们包含文本和图像的混合。屏幕截图会受到拉伸(像素化)或缩小(文本变得不可读)的影响。

但它也感觉就像有人可能已经研究过这些问题之一,并且可能有一个算法来正确解决它。

数据存储在SQL数据库中,因此我需要在SQL中进行分析。数据可能如下所示:

---------------------------------------------------------
| Id                                   | Width | Height |  
---------------------------------------------------------
| 00b701c6-1c31-4323-a292-700b4dff2e45 |   784 |   1310 |
| 0a46a0f6-a3b2-4a5d-a8be-55bad84ba37d |  1414 |    957 |
| 0b79fbe8-6b9e-48d1-89da-8981570e23d7 |   784 |    561 |
| 0e9f5935-0e58-42d2-bba2-3e89db55260f |   400 |    400 |
| 0ebf14fb-094b-47f5-9e25-b4f54bc2eab9 |  2260 |    957 |
| 17131cd6-f5b2-4e4d-a63b-b909e04e2d89 |  1414 |    957 |
| 2298fc73-0bcb-49c8-b54e-3184cf4153d4 |   784 |   1310 |
| 28ffee4a-2d08-4862-aeb0-6546cda4e225 |  2560 |   1387 |
| 29cf92ad-b6fd-43c6-abb1-7c5a7e4af92d |  2260 |    957 |
| 307b2b6e-1f66-4784-bd7d-b6bfc4768fbd |  2560 |   1387 |
| 3edc916b-4b3d-4fd8-a1f9-6418a4d8d27a |  2333 |    435 |
| 3ef1132a-d059-487a-9cad-dbb3895ad25a |  1414 |    957 |
| 43e044e5-5f82-4b86-95ba-a9e76f5d2519 |   657 |    435 |
| 464be0ec-5cb7-4f3f-856d-6beb5fbc2f5e |   657 |    435 |
| 510d0236-e61a-4f1c-bb0b-754c4c1f80f7 |  2260 |    957 |
| 52f217d5-038c-475d-af96-89d1930e8c2f |   657 |    435 |
| 532cadf5-c20b-4b1c-84d4-78e1b501495f |  2333 |    435 |
| 5f3e55aa-12a4-4502-a159-fdc128b53e11 |  2260 |    957 |
| 626c33a9-aaa0-47b6-a6f3-bd5235f1655b |   784 |    561 |
| 6711a717-e1ee-4930-9f21-5e225a99a769 |   657 |    435 |
| 7125c301-c311-4339-b36c-519dc3714c68 |   784 |    561 |
| 8f5d8e3b-8213-4cd6-8ea0-311297f4cfc3 |  2333 |    435 |
| c3d7661f-12e6-4297-8830-15e82850bc32 |   784 |   1310 |
| cd32106e-2f3e-4614-ac40-19e3f5d7fa1f |   784 |    561 |
| d7191194-1f8a-4230-8ee0-8a8b427b86e7 |   784 |   1310 |
| d737de66-849d-4ec3-bf3b-cc48bfa1f3a6 |  2560 |   1387 |
| d935e10b-88f3-4aba-a2b4-a1a9cfd8acb4 |  2560 |   1387 |
| dcc8e9e6-4ee3-4737-a530-d2fcffd35a86 |  2333 |    435 |
| ec3187be-5a81-4ecb-a908-ddedaa5930ec |  1414 |    957 |
---------------------------------------------------------

2 个答案:

答案 0 :(得分:2)

您可以按如下方式计算Jaccard index

function jaccard(rect : Rectangle, img : Rectangle) : float
  rectArea := rect.width * rect.height
  imgArea := img.width * img.height
  interArea := min(rect.width, img.width) * min(rect.height, img.height)
  return interArea / (rectArea + imgArea - interArea)
end

然后选择得分最高的图像(值从零到一)。

答案 1 :(得分:0)

我没有完整的算法,但我的方法是根据每个图像与矩形的匹配程度对其进行评分。有趣的参数是比率(宽度/高度),因此计算每个图像的比率并将其与矩形的比率进行比较。最近的比率获胜。

至于第二个问题,我可能会设置一个阈值,如果最佳拟合的比率非常接近矩形(低于阈值),你可以通过拉伸(看起来比两个非常薄的边框更好),如果它高于阈值,则添加黑色边框,因为扭曲的文本是可怕的。