1

ランダムな画像を生成し、各ピクセルにランダムな色を与える簡単なプログラムを作成しました。調整可能なイメージを生成する可能性は非常に低いことはわかっていますが、試してみたいと思います。

作業の最も長い部分は、画像が本当に何かであるかどうかを確認することです。また、生成された画像のほとんどは、多数の個々のピクセルを含むカラフルな画像のフィールドにすぎないこともわかりました。そのため、画像内の類似した色の領域を検出するための疑似コードのアルゴリズムを求めたいと思います。意味のある画像を見つける最も簡単な方法は、ランダムなピクセル画像をすべてフィルタリングすることだと思います。完璧ではありませんが、役立つと思います。誰かがこのタスクに役立つ別の種類のフィルタリング アルゴリズムを提案できれば、私もそれを高く評価します。

(編集)

これを明確にするために、私の説明が十分に明確でない場合に備えて、いくつかの画像を示します。

これは私が得ている種類の画像です。基本的には「カラフルなノイズ」と表現します。ご覧のとおり、すべてのピクセルは、類似した色領域にグループ化されずに個別に分散されており、オブジェクトの形状や何かと調和するものを巧みに作成しています。

ここでは、従来のイメージ、「調整可能な」イメージを見ることができます。テニスボールを持って草の上に横たわっている犬がはっきりと見えます。この写真を注意深く観察すると、他の写真とはっきりと区別できます。なぜなら、私たちが区別できる類似の色の集合があるからです (犬、白い部分、草、濃い緑の部分、テニス ボール、明るい部分など)。緑の領域)。

私が正確に望んでいるのは、HDに保存する前に「ピクセル」画像を削除し、色の分裂のある画像のみを保存することです。前に言ったように、このアイデアは、これらのランダムに生成された画像をフィルタリングするために必要だった最善のものですが、誰かが別のより効率的な方法を提案してくれたら、本当に感謝します.

(編集)

わかりました、この記事は長くなりすぎていると思います...誰かが見たいのであれば、私が書いたプログラムのコードがここにあります。それは本当に簡単です。Pygameを使用してPythonでプログラムしました。これが最も効率的な方法ではないことはわかっていますが、それは承知しています。問題は、私はこの分野ではまったく初心者であり、他の言語やモジュールでこれを行う別の方法を本当に知らないということです。多分あなたもこれで私を助けることができます...私は知らない、多分コードをC++に翻訳しますか? 同じ投稿で多くの質問を求めているように感じますが、何度も言ったように、どんな助けも大歓迎です.

import pygame, random
pygame.init()

#lots of printed text statements here

imageX = int(input("Enter the widht of the image you want to produce: "))
imageY = int(input("Enter the height of the image you want to produce: "))
maxImages = int(input("Enter the maximun image amoungt you want to produce: "))
maxMem = int(input("Enter the maximun data you want to produce (MB, only works with     800x600 images): "))
maxPPS = int(input("Enter the maximun image amoungt you want to produce each second: "))
firstSeed = int(input("Enter the first seed you want to use: "))

print("\n\n\n\n")

seed = firstSeed
clock = pygame.time.Clock()
images = 0
keepGoing = True

while keepGoing:

    #seed
    random.seed(seed)

    #PPS
    clock.tick(maxPPS)

    #surface
    image = pygame.Surface((imageX,imageY))

    #generation
    for x in range(imageX):
        for y in range(imageY):
            red = random.randint(0,255)
            green = random.randint(0,255)
            blue = random.randint(0,255)

            image.set_at((x,y),(red,green,blue))

    #save
    pygame.image.save(image,str(seed)+".png")

    #update parameters
    seed += 1
    images += 1

    #print seed
    print(seed - 1)

    #check end
    if images >= maxImages:
        keepGoing = False
    elif (images * 1.37) >= maxMem:
        keepGoing = False

    pygame.event.pump()


print("\n\nThis is the last seed that was used: " + str(seed - 1))
input("\nPress Enter to exit")
4

3 に答える 3

1

これがあなたが試すための虐待されたアルゴリズムです(OpenCVで試してみてください):

  1. 画像を取得
  2. 画像の1つの色の寸法、つまり赤または緑...または灰色...で作業するか、それぞれについて次の手順を個別に実行します
  3. 画像内のすべての値を合計し、これを画像の「エネルギー」値として保存します
  4. OpenCVのスムーズ機能を使用して画像をぼかします
  5. 画像を正しくぼかす秘訣は、カーネルのサイズ(別名フィルター)を重要な機能の幅よりも小さく、重要でない機能やノイズの多い機能よりも大きくすることです。サイズは、param1とparam2を定義することによって制御されます。http://opencv.willowgarage.com/documentation/python/imgproc_image_filtering.htmlを参照してください
  6. 次に、出力について、すべての値を合計して、出力の「エネルギー」を取得します。
  7. 出力に入力のエネルギーの少なくとも半分がある場合は、画像を保持します。技術的には、5番目のトリックは、画像を保持または破棄するためのしきい値として50パーセントを選択することと同じです。したがって、ここでしきい値を変更することは、フィルターサイズを変更することとほぼ同じです。
  8. オプション。しかし、それについてあまり考える必要はありません。画像のいくつかのセットについてこれらのエネルギー値を取得し、目でしきい値を選択するだけです。

何が起こっている?高周波をフィルタリングして、まだ何かが残っているかどうかを確認します。ほとんどの画像は、より低い空間周波数で多くのエネルギーを持っています。実際、jpeg圧縮はこの事実を使用して画像を圧縮します。フィルターは正しく機能するために1のエネルギーを持っている必要があるので、これは本当だと思います。

お役に立てれば!

于 2012-08-26T20:37:26.803 に答える
0

ノイズを除去する最も簡単な方法は、相関関係を探すことです。近くの領域は、ほとんどの画像で高度に相関している必要があります。それを行うには非常に多くの方法があります。

次の組み合わせを使用し、いくつかの調整を行ってパラメーターを見つけ、許容できるヒット/ミス比を取得する必要があります。

色の相関: 「適切な」画像では、近くの領域の U/V に膨大な量の相関が見られます。

エッジ検出: 自然なイメージには、明確に定義されたエッジがある傾向があります。自然画像からノイズを検出する最も簡単な方法は、これを行うことです。

周波数分析: ノイズの多い画像にはすべての周波数があり、通常、自然な画像には大きなピークがあります。取得したい複雑さに応じて、スペース分析などをスケーリングします。許容できるヒット率の量。一般に、認識可能な画像を取得しようとすることはオープンエンドのトピックですが、例で示したようなノイズ画像を特に除去したい場合は、非常に高いヒット率を得ることができるはずです.

編集: 一般に、このような問題に対する正確なアルゴリズムはありません。基になるデータのプロパティについて仮定する必要があります。次に、基本的なプリミティブ (相関、周波数領域データ、エッジなど) を使用し、それを組み合わせて、問題を解決するためのアルゴリズムを提供します。これは、このような問題の解決策が非常にデータ固有であるためです。コンピューター サイエンスのアルゴリズムを解くこととはまったく異なります。これは、信号処理アルゴリズムに正確性がないということではありません。ただし、現在の問題と他の多くの問題は、ランダム変数と確率過程として知られているものを扱っています。誰かが文学や大学でこの問題を解決しようとしたかどうかを検索する必要があるかもしれません. それを出発点として使用できます。そのアルゴリズムを微調整して、あなたに合わせてください。

于 2012-08-24T09:24:28.217 に答える
0

何を達成しようとしているのかを正確に知らなければ、具体的な支援を提供することは困難です。しかし、あなたのアカウントを読んで、私が最近見たものを思い出しました。これは、実装はまったく異なりますが、同様の最終目標を持っています: ランダム性から認識可能な画像を生成します.

Philip McCarthy によるhttps://github.com/phl/pareidoloopをチェックしてください。

Philip のプロジェクトはランダムなポリゴンから始まり、アルゴリズムは顔のような画像を優先します。ここで 2 つの重要なポイントがあります。ポリゴンはすぐにランダム ノイズの量を大幅に削減するため、認識可能なものを生成する可能性が大幅に高まります。第二に、アルゴリズムは特定の種類の認識可能な画像を優先します。「認識可能性」を計算で推定するためのいくつかのパラメーターを得るために、特定の種類の画像に向けて作業する必要があると思います。

ひ!

于 2012-08-24T17:33:02.103 に答える