5

このような縮尺の地図があります: (数字は単なる例です)

勾配これは、マップ上の単一の変数を表します。しかし、私は元のデータにアクセスできず、画像処理についてほとんど何も知りません。私が行ったことは、マップ上の各ポイントのピクセル座標と RGB 値を取得するために PIL を使用することです。単純にそれぞれを使用pix = im.load()して保存pix[x,y]しますx,y。ここで、上記のグラデーションを使用して各ポイントの値を推測したいと思います。

そのような勾配の標準式はありますか? 訓練された目には非常によく似ていますか?いくつかの例については、Digital Library of Mathematical Functionsにアクセスしました...しかし、それが色相、rgb 高さ関数、または他の何かを使用しているかどうかはわかりません (物事を簡単にするために、私はいくつかの緑/眉/赤にも色盲です) ) :)

進め方、ライブラリ、リンク、またはアイデアに関するヒントをいただければ幸いです。ありがとうございました!

編集:

返信とマルティノーの提案に従って、上部と下部の色をキャッチしようとしました:

def rgb2hls(colotup):
    '''converts 225 based RGB to 360 based HLS
    `input`: (222,98,32) tuple'''

    dec_rgb = [x/255.0 for x in colotup] # use decimal 0.0 - 1.0 notation for RGB
    hsl_col = colorsys.rgb_to_hls(dec_rgb[0], dec_rgb[1], dec_rgb[2])
    # PIL uses hsl(360,x%,y%) notation and throws errors on float, so I use int
    return (int(hsl_col[0]*360), int(hsl_col[1]*100), int(hsl_col[2]*100))


def pil_hsl_string(hsltup):
    '''returns a string PIL can us as HSL color
    from a tuple (x,y,z) -> "hsl(x,y%,z%)"'''
    return 'hsl(%s,%s%%,%s%%)' % (hsltup[0], hsltup[1], hsltup[2])


BottomRed = (222,98,32) # taken with gimp
TopBlue =  (65, 24, 213) 

hue_red = pil_hsl_string(rgb2hls(BottomRed))
hue_blue = pil_hsl_string(rgb2hls(TopBlue))

ただし、結果はかなり異なります... rgb_to_hls 関数を使用して値を抽出することについて心配しています。それとも私は何か非常に悪いことをしていますか?コードで color が変換されるものは次のとおりです。 ここに画像の説明を入力

4

4 に答える 4

2

色を比較したい領域を定義することをお勧めします。領域の FFT を取得します。各色は周波数によって定義されます。等高線スケールでも同じことを行います。次に、値を比較して絞り込みます。

私はそれをよりよく理解するのが好きな人を見つけました。

http://www.imagemagick.org/Usage/fourier/

于 2012-10-31T15:18:31.083 に答える
2

興味深い質問..

250,85%,85% --> 21,85%,85% から HSL 色空間を時計回りに歩くと、示したものに非常に近いグラデーションが得られます。明らかな違いは、画像がかなり狭い範囲の緑がかった値を示していることです。

したがって、4 つのマジック ナンバーがあれば、マップ内の任意のポイントに補間できます。

もちろん、これらは最初と最後の色であり、最初と最後のスケール値でもあります。これは、H チャネル (gimp を使用) で直線的なグラデーションを使用して取得した画像です。 ここに画像の説明を入力

編集:それ以来、各行のピクセル値を取得して結果をグラフ化するプログラムを作成しました。実際、色相が線形ではないことがわかります。また、S & V チャネルが約 115 (画像の上から 115 ピクセル) で明確に落ち込んでいることもわかります。これは確かに緑のバンドに対応しています。

曲線の形状を考えると、おそらく何かをモデル化することを意図していると思いがちです。しかし、曲線の形状を認識するための関連分野での経験がありません。

以下に、HSV モデルと RGB モデルの両方の変化のグラフを追加しました。グラフの左側はバーの上部を表します。X 軸のラベルはピクセルを表します

非常に興味深いと思います。ブックマークしました。

ここに画像の説明を入力

ここに画像の説明を入力

于 2012-10-27T20:28:05.373 に答える
2

画像のスケールは、私には HSV グラデーションのように見えます。これは、この質問で言及されているようなものです。その場合、colorsys.rgb_to_hls()またはcolorsys.rgb_to_hsv()関数を使用して、ピクセルの r、g、b 値から 0 ~ 1 の色相値を取得できます。その後、それに応じてマッピングできます。

ただし、OCRを実行するだけでは、ハードコーディングできる一貫した範囲でない限り、表現される値の範囲を決定する方法がわかりません。

于 2012-10-27T17:55:47.257 に答える
1

固定の彩度と輝度で色相を変化させることで、そのようなものを得ることができます。

http://en.wikipedia.org/wiki/HSL_and_HSV

于 2012-10-27T15:41:50.883 に答える