在图像中找到已调整大小的子图像

时间:2012-06-25 16:28:41

标签: c# image-processing emgucv

我正在一个项目中工作,每个用户都有一个大头像和这个头像的缩略图。头像是150x215,缩略图是50x50。为了生成缩略图,用户选择化身内的方形区域,系统裁剪并调整化身大小以生成缩略图。

现在我需要一个70x70的缩略图。我无法调整50x50缩略图的大小,因为它看起来不太好。我的想法是创建一个工具来查找头像内的缩略图,并使用缩略图位置生成新的70x70图像。它工作得很好,直到我注意到一些缩略图不仅被裁剪,它们被调整大小。当调整图像大小时,它会丢失像素,这使得无法进行逐像素比较(因此我无法检测到化身内的缩略图位置)。

有没有办法确定缩略图的位置(即使它已调整大小)?我正在使用EMGU来处理图片。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

<强> [EDIT1]

看到你的注释,如果你有缩放因子应用于原始头像,那么你可以创建一个应用相同缩放因子的临时缩略图,然后对已经缩放的头像执行缩略图的统计等效性检查。这看起来是针对缩略图可能位于化身内的每个位置找到缩略图的“差异图像”与缩放的化身图像。对于这些“差异图像”中的每一个,将所有基于像素的差异添加到组合的单个数字差异中并将其存储到尺寸为x和y位置的尺寸的2D阵列中,缩略图可以放置在缩放的化身图像内(这将小于总头像图像大小,实际上它将是width = avatarWidth - thumbWidth和height = avatarHeight - thumbHeight)。在计算了此2D阵列的所有单个差异实例后,只需在阵列中找到min,即在缩放的头像中使用的左上角像素位置。当你从这个计算出的左上角抓住你的70 x 70时,你当然必须考虑50 x 50拇指的新缩放尺寸。

你不(顺便说一下)你必须存储这个差异值的二维数组,你可以简单地保持一个最小位置,该位置用第一个测试位置的值初始化,并且仅在当前位置小于目前的分钟。这样可以避免增加存储阵列。

<强> [原稿] 一旦调整了头像图像的大小,它也被插值,这对于所有密集目的意味着原始像素信息已经被不可逆转地数学改变。

你可能有更好的运气进入原始的缩略图代码,并更改缩略图代码以获取70 x 70 px子图像,然后通过从每一侧裁剪另外10 px创建50 x 50!这假设您仍然需要50 x50和70 x 70缩略图。