千图成像原理

博客介绍了千图成像的原理,通过切割背景图像并利用图像库中颜色和结构相近的图像进行拼接。内容涉及灰度图像处理、欧式距离计算以及感知哈希算法的实现步骤,包括图像尺寸缩小、色彩简化、平均值比较和汉明距离计算,用于判断图片相似性。
摘要由CSDN通过智能技术生成

千图成像就是用很多张图片拼接成一张完整的图片,需要一张背景图像和一个图像库。根据背景图的结构用图像库中的图像进行拼接,最终形成新的拼接图像。

原理

将背景图像切割为若干小块,切割的越细生成的图像的效果越好,或者直接使用背景图像中的每个像素点;然后用图像库中与之最相近的图像拼接完成。

颜色相近

  • 灰度图像
    直接计算所有像素灰度值的平均值,取最接近N张图后供后期再次筛选。
  • 彩色图像
    分别计算R/G/B的平均值,对于一张图像得到的是一个类似于[20, 30, 40]的数组,然后计算欧式距离,取最接近n张图像供后期再次筛选。

结构相似

我们不能单纯的以为两张图像中包含的颜色差不多就判断为最相似,还需要判断颜色的“位置”是否相似。

  • 提取图像的结构,颜色对结构的意义不大,所以直接将图像库中的所有图像转换为灰度图像。
  • 将每张图像resize为(8,8),然后计算所有像素值的平均值。
  • 将resize之后的图像中的每个像素点分别与平均值进行比较,高于或等于平均值的记为1,小于平均值的记为0,得到每张图像的一个长度为64类似于[0,1,1,0,1,0…,0,1,1]的编码。
  • 对于背景图像中切割的小图像块,按顺序(如从左上角到右下角),也进行上述操作,然后分别图像库中每张图像的编码进行比较,相同位数最多的图像即为最像素的图像。

两张图像相似的感知哈希算法(Perceptual hash algorithm),它的作用是对每张图片生成一个“指纹”(fingerprint)字符串,然后比骄傲不同图片的指纹。结果越接近,就说明图片越相似。
感知哈希算法简单实现:

  • 缩小尺寸
    将图片缩小到8x8的尺寸,总共有64个像素。这一步的作用是去除图片的细节,只保留结构、明暗等基本信息,摒弃不同尺寸、比例带来的图片的差异。
  • 简化色彩
    将缩小后的图片,转为64级灰度,即所有像素点总共有64种颜色。
  • 计算平均值
    计算所有64个像素的平均灰度值。
  • 比骄傲像素的灰度
    将每个像素的灰度,与平均值进行比较。大于或等于平均值,记为1;小于平均值,记为0.
  • 计算哈希值。
    将上一步的比较结果,组合在一起,就构成了一个64位的整数,这就是这张图片的指纹。组合的次序并不重要,只要保证所有图片都采用了同样的次序就行。
  • 计算汉明距离
    得到指纹后,就可以对比不同的图片,看64位中有多少位是不一样的。如果不相同的数据位不超过5,就说明两张图片很相似;如果大于10,就说明这是两张不同的图片。

参考资料
千图成像!祝可爱的小伙伴们圣诞快乐
【Python还能干嘛】爬取微信好友头像完成马赛克拼图(千图成像)~
相似图片搜索的原理
在线创意照片马赛克神器!(懒人图云)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值