7

CakePHP ロゴなどの画像が与えられた場合、この画像をレイヤー付きの PSD に戻すにはどうすればよいでしょうか。人間として、これをレイヤー付きの PSD に変換する方法を簡単に考え出すことができます。背景が星形のエッジを持つ円形であることがわかります。円形の星の部分が後ろにあり、ケーキの画像がその上にあり、CakePHP という言葉がこれら 2 つの画像すべての上にあります。

Photoshop/Gimp ツールを使用して、これらの画像を 3 つの画像に分割し、その間の領域を塗りつぶすことができます。次に、3つのレイヤーがあります。

ここに画像の説明を入力

人間として、ほとんどのロゴと画像のレイヤーを作成するのは簡単で、多くの画像には複数のレイヤーがあります。CakePHP ロゴはほんの一例です。現実世界の画像にもレイヤリングがあり、草の背景の上に木のレイヤがある場合があります。画像をレイヤー表現に戻す一般的な方法、理想的にはソフトウェア ソリューションが必要です。

プログラムされた解決策がない場合、この問題を解決する、またはこの問題に関連する論文や研究はありますか? 私は主に、ロゴや Web サイトのタイトルなど、人間が作成した画像をレイヤー化された表現に変換することに関心があります。


これを行うことのいくつかの利点を指摘したいと思います。この画像を自動的にレイヤー化された表現にすることができれば、画像をより簡単に変更できます。たとえば、ケーキを小さくしたい場合、コンピューターがすでに赤い背景の上にケーキを重ねている場合は、ケーキのレイヤーを拡大縮小するだけです。これにより、レイヤー情報がまだない Web サイト上の画像のレイヤー調整が可能になります。

4

2 に答える 2

4

すでに述べたように、これは重要なタスクです。最終的に、それは次のように最も簡単に表現できます: ピクセル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)

しかし、ここでも、マスクに属するピクセル数の観点から何が「重要」であるかを説明する必要があります (いくつかの色を見逃す可能性がある範囲で)。代わりに似たような色をクラスター化することもできますが、クラスターはどのくらいの密度で有意になりますか? それが単なる純粋な色ではなく、質感のあるものだったとしたら、これをどのように説明できるでしょうか? または、ある層が別の層の一部である、またはその前にあるという推論についてはどうでしょうか? または、最終的には、一部のレイヤーは人間が「文字」と呼んでいるように見えるため、おそらくすべて関連しているはずです...

セグメンテーションにおけるコンピューター ビジョンの研究の多くは、一般に、この問題を取り上げ、この事前知識を効果的にエンコードして適用できるフレームワーク内で改善しようとしています...

于 2012-10-12T14:58:25.530 に答える
4

レイヤー表現から画像に変換すると、情報が失われます。たとえば、ケーキの背後にある背景レイヤーのピクセルの値がわかりません。さらに、画像のどの部分がどのレイヤーに属しているかはわかりません。

ただし、場合によっては、この情報を少なくとも部分的に復元または推定できる場合があります。たとえば、セグメンテーションアルゴリズムを使用して、画像を「レイヤー」に分割することができます。あなたの例では、色に基づく単純なセグメンテーションがおそらく機能します。

背景の失われたピクセル値の回復に関しては、周囲に基づいて画像の欠落領域を推定しようとする、いわゆる修復技術があります。

最後に、画像内のテキストの位置と内容を復元するには、光学式文字認識(OCR) メソッドを利用できます。

見た目よりも複雑な問題を解決するための単純なアルゴリズムはないことに注意してください。ただし、上記の情報を使用して、問題の少なくとも部分的な自動化を試みることができます。

于 2012-10-10T12:29:41.760 に答える