Phi*_*hil 6 artificial-intelligence image image-processing layer computer-vision
给定一个像CakePHP标志的图像,如何将这个图像转换回带有图层的PSD.作为一个人,我可以很容易地找出如何将其转换回带有图层的PSD.我可以看出背景是一个带有星形边缘的圆形.因此,圆形星形部分位于背面,蛋糕图像位于此顶部,CakePHP字样覆盖所有这两个图像.
我可以使用Photoshop/Gimp工具将这些图像分成三个图像并填充其间的区域.然后我有三层.

作为人类,很容易计算出大多数徽标和图像的分层,许多图像都有多层,CakePHP徽标就是一个例子.现实世界中的图像也具有分层,在草的背景上可能存在树层.我需要一种通用的方法将图像转换回分层表示,理想情况下是软件解决方案.
如果没有程序化解决方案,是否有任何论文或研究可以解决这个问题或与此问题有关?我最感兴趣的是将人体构建的图像(例如徽标或网站标题)转换回分层表示.
我想指出这样做的一些好处,如果你可以自动将这个图像变成分层表示,那么修改图像就更容易了.例如,也许你想让蛋糕变小,如果计算机已经将蛋糕分层放在红色背景上,你可以缩放蛋糕层.这允许在已经没有层信息的网站上对图像进行层调整.
正如已经提到的,这是一项不平凡的任务。最终,它可以最简单地表述为:给定由像素N组成的图像(或场景,如果是真实照片),如何将它们分配给M层?
对于分割,这完全取决于您可以应用的先验知识,例如像素和像素组的哪些属性,给出“提示”(我建议使用这个词!)作为它们所属的图层。
考虑一下最简单的情况,即仅使用图像中的颜色。我可以生成这 5 个“图层”(色调值 0、24、90、117 和 118):

使用此代码(在 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)
Run Code Online (Sandbox Code Playgroud)
但是,即使在这里,我们也必须根据属于掩模的像素数量来描述什么是“重要的”(在某种程度上我们可能会错过一些颜色)。我们可以开始将相似的颜色聚集起来——但是聚集的密度达到什么程度才会变得重要呢?如果它不仅仅是纯色,而是有纹理,我们该如何描述呢?或者,推断一个层是另一层的一部分或位于另一层的前面又如何呢?或者,最终,某些层似乎是我们人类所说的“字母”,因此可能应该都是相关的......
计算机视觉领域的许多分割研究通常试图解决这个问题,并在一个可以有效编码和应用先验知识的框架内改进它......
| 归档时间: |
|
| 查看次数: |
35656 次 |
| 最近记录: |