如何使用低分辨率的裁剪照片作为指导重新裁剪原始的更高分辨率的副本?

我有一张正方形的,低分辨率的照片,已经被用户从高分辨率,非正方形的原稿中裁剪出来。 低分辨率的照片然后被调整为缩略图。 我想自动(不需要用户干预)以相同的方式重新裁剪原始照片,以获得更高分辨率的正方形版本。 我没有访问原始的修剪器坐标。 我只有这两张照片。

下面是一些示例图片(来自我的Facebook个人资料)来说明我的意思:

原始的,高分辨率的照片 – 裁剪,然后缩小,方形照片

再次,目标是使用小照片作为指导从源头获得更高分辨率的方形照片。

解决scheme的唯一限制是:

  1. 普遍性:我正在使用这个configuration文件图片,所以如果它只适用于完全可以接受的面孔! 没有必要推广到各种随机图像,人们的照片是一个很好的起点。
  2. 平台:我正在使用Node,但我很乐意在Ruby,Python,Java或C ++(使用Node绑定)中运行此过程。 它几乎肯定会在Heroku或AWS上运行。
  3. 速度:这将需要非常快速。 为了这是有用的,它将不得不以联机的方式运行,因为我会阻止用户的界面等待这个动作。

有没有人有任何想法? 我对image processing知之甚less,所以我不知道从哪里开始。

编辑:对于Facebook,具体来说,有一个解决scheme,几乎没有这么难。 原始作物数据可用于configuration文件图像: https : //graph.facebook.com/bcherry/profile?fields=pic_crop

这会让我立即陷入困境,但可能不是一个长期的解决scheme,所以下面提供的答案对于更一般的问题还是很有帮助的。

虽然我不会评论我的解决scheme的JavaScript性能 – 你基本上试图执行原始和裁剪,resize的图像之间的图像注册 。

有许多不同的方法可以做到这一点 – 为了您的特定目的,我会从类似相位的方法开始。

编辑:我刚刚find一个不错的脚本,使用ImageMagick完全是你所需要的。 NormCrossCorr “计算归一化的互相关曲面,以find在较大的图像中小图像最匹配的位置。

希望这可以帮助!

你将需要比JavaScript更多的东西。 我会研究与python的image processing。 可能有用的链接:

scikits图像

PIL

图像比较algorithm

机器学习

减小尺寸是通过平均还是最近像素来完成可能很重要。 如果缩小是通过最近像素完成的,则可以在缩小/裁剪后的图像中查找与原始图像中的像素对应的像素值匹配像素。 除非图像以某种无损格式存储,否则必须使比较模糊,但如果能够识别可能的匹配,则作物的比例和位置立即可用。

如果在缩放中存在一些平均值,或者在图像压缩中存在太多的损失,则可以通过高斯模糊两个图像并尝试基于模糊图像的局部特征来匹配,例如局部最小值的x,y或原色的最大值。 再次,比赛必须是模糊的。