如何从图像(jpg、png等)中提取图层

假设我们有一张CakePHP的标志图片,如何将其转换回带有图层的PSD文件?作为人类,我可以轻松地推断出如何将其转换回带有图层的PSD文件。我可以看出背景是一个带有星形边缘的圆形。因此,圆形星形部分在最下面,蛋糕图片在其上面,而CakePHP的文字则覆盖在这两张图片之上。

我可以使用Photoshop/Gimp工具将这些图像分离成三张图片,并填补中间的区域。这样我就有了三个图层。

enter image description here

作为人类,很容易推断出大多数标志和图像的图层结构,许多图像都有多个图层,CakePHP的标志只是一个例子。现实世界中的图像也有图层结构,可能有树木图层覆盖在草地背景之上。我需要一种通用的方法,将图像转换回图层表示,最好是软件解决方案。

如果没有编程解决方案,有没有解决此问题或与此问题相关的论文或研究?我主要对将人类构建的图像(如标志或网站标题)转换回图层表示感兴趣。


我想指出这样做的几个好处,如果你能自动将图像转换为图层表示,那么修改图像就更容易。例如,也许你想把蛋糕做得更小,如果计算机已经将蛋糕图层放在红色背景之上,你只需缩放蛋糕图层。这允许对没有图层信息的网站上的图像进行图层调整。


回答:

如前所述,这是一项非平凡的任务。最终,可以最简单地表述为:给定一个由像素N组成的图像(或如果是真实照片,则为场景),如何将这些像素分配到M个图层中?

对于分割,关键在于你能利用的先验知识,这些知识可以帮助你判断像素及其组的哪些属性为它们所属的图层提供了“提示”(我谨慎地使用这个词!)。

即使是最简单的使用图像中的颜色,我也能够生成这5个“图层”(对于色调值0、24、90、117和118):

12345

使用以下代码(在python/opencv中)

import cv # get orginal imageorig = cv.LoadImage('cakephp.png')# show original cv.ShowImage("orig", orig)# convert to hsv and get just huehsv = cv.CreateImage(cv.GetSize(orig), 8, 3) hue = cv.CreateImage(cv.GetSize(orig), 8, 1) sat = cv.CreateImage(cv.GetSize(orig), 8, 1) val = cv.CreateImage(cv.GetSize(orig), 8, 1) cv.CvtColor(orig, hsv, cv.CV_RGB2HSV)cv.Split(hsv,hue,sat,val,None)#cv.ShowImage("hue", hue)# loop to find how many different hues are present...query = cv.CreateImage(cv.GetSize(orig), 8, 1) result = cv.CreateImage(cv.GetSize(orig), 8, 1) for i in range(0,255):  cv.Set(query,i)  cv.Cmp(query,hue,result,cv.CV_CMP_EQ)  # if a number of pixels are equal - show where they are   if (cv.CountNonZero(result)>1000): # <-what is signficant?    cv.ShowImage(str(i),result)    cv.SaveImage(str(i)+".png",result)    cv.WaitKey(-1)

但即使在这里,我们也必须描述什么是“重要”的,根据属于掩模的像素数量(以至于我们可能会错过一些颜色)。我们可以开始聚类相似的颜色——但在什么密度下一个聚类变得重要?如果不仅仅是纯颜色,而是有纹理,我们该如何描述?或者,如何推断一个图层是另一个图层的一部分,或在其前面?或者,最终,一些图层似乎是我们人类称为“字母”的东西,因此应该都相关…

计算机视觉中关于分割的研究通常试图在能够有效编码和应用这种先验知识的框架内解决和改进这个问题…

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注