image - 如何从图像中提取图层(jpg,png等)

标签 image image-processing artificial-intelligence computer-vision layer

给定一个图像,例如 CakePHP Logo ,如何将这个图像转换回带有图层的 PSD。作为人类,我可以很容易地弄清楚如何将其转换回具有图层的 PSD。我可以看出背景是带有星形边缘的圆形。所以圆形星形部分在后面,蛋糕图像在上面,CakePHP 字样在这两个图像之上。

我可以使用 Photoshop/Gimp 工具将这些图像分成三个图像并填充中间的区域。然后我有三层。

enter image description here

作为人类,很容易计算出大多数 Logo 和图像的分层,并且许多图像具有多个层次,CakePHP Logo 只是一个示例。现实世界中的图像也有层次感,在草的背景上可能会有树的层次。我需要一种从图像转换回分层表示的通用方法,理想情况下是一种软件解决方案。

在没有程序解决方案的情况下,是否有任何论文或研究解决了这个问题或与这个问题相关?我最感兴趣的是将人类构建的图像(例如 Logo 或网站标题)转换回分层表示。

我想指出这样做的一些好处,如果您可以自动将此图像转换为分层表示,那么修改图像会更容易。例如,也许你想让蛋糕变小,如果计算机已经在红色背景上分层了蛋糕,你可以缩放蛋糕层。这允许在还没有图层信息的网站上对图像进行图层调整。

最佳答案

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

对于分割,一切都与您可以承受的先验知识有关
关于像素和像素组的哪些属性给出“提示”(和
我建议使用这个词!)关于它们所属的层。

甚至考虑仅使用图像中的颜色的最简单情况。我可以
生成这 5 个“层”(对于色调值 0、24、90、117 和 118):

1
2
3
4
5

使用此代码(在 python/opencv 中)

import cv 

# get orginal image
orig = cv.LoadImage('cakephp.png')

# show original 
cv.ShowImage("orig", orig)

# convert to hsv and get just hue
hsv = 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)

但是,即使在这里,我们也不得不用
属于掩码的像素数(在某种程度上我们可能会错过一些
颜色)。我们可以开始聚集相似的颜色——但是在什么时候
集群的密度是否变得重要?如果它不仅仅是纯色,
但是有纹理,我们怎么能描述这个呢?或者,如何推断
一层是另一层的一部分,还是在它前面?或者,最终,一些
这些层似乎是我们人类所说的“字母”,因此可能应该是
所有相关...

计算机视觉中的许多分割研究通常都试图采取
这个问题并在可以编码和应用它的框架内改进它
先验知识有效...

关于image - 如何从图像中提取图层(jpg,png等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12817137/

相关文章:

artificial-intelligence - 有没有开源的分层时间内存库?

java - 使用 Java AWT 将图像添加到面板

android - 图片不清晰 - picasso Android

java - 如何从 Image Magick In Java 等程序中读取图像数据?

c++ - 如何从图像中删除小形状?

python - 如何使用 ANN 和遗传算法在 Python 中为井字游戏创建 AI?

jquery - 在 slider 中使用 css 类更改图像不透明度

macos - 带有图像的 NSButton

matlab - 添加高斯噪声的 Var

Python 国际象棋实现