Mathematica で Waldo を見つけるにはどうすればいいですか? 質問する

Mathematica で Waldo を見つけるにはどうすればいいですか? 質問する

週末に私を悩ませていたのは、これを解決する良い方法は何ですか?ワルドはどこ?[北米以外の「ウォーリー」 ] パズル、Mathematica (画像処理やその他の機能) を使用していますか?

これまでのところ、赤以外の色の一部を暗くすることで視覚的な複雑さを少し軽減する関数は次のとおりです。

whereIsWaldo[url_] := Module[{waldo, waldo2, waldoMask},
    waldo = Import[url];
    waldo2 = Image[ImageData[
        waldo] /. {{r_, g_, b_} /;
          Not[r > .7 && g < .3 && b < .3] :> {0, 0,
          0}, {r_, g_, b_} /; (r > .7 && g < .3 && b < .3) :> {1, 1,
          1}}];
    waldoMask = Closing[waldo2, 4];
    ImageCompose[waldo, {waldoMask, .5}]
]

これが「機能する」 URL の例:

whereIsWaldo["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"]

(ワルドはレジのそばにいます):

オリジナル画像

Mathematica グラフィック

ベストアンサー1

ワルドを見つけたよ!

ワルドが見つかった

私がそれをやった方法

まず、赤以外の色をすべて除外します

waldo = Import["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"];
red = Fold[ImageSubtract, #[[1]], Rest[#]] &@ColorSeparate[waldo];

次に、この画像と単純な白黒パターンの相関を計算して、シャツの赤と白の変化を見つけます。

corr = ImageCorrelate[red, 
   Image@Join[ConstantArray[1, {2, 4}], ConstantArray[0, {2, 4}]], 
   NormalizedSquaredEuclideanDistance];

私はBinarize画像内の十分に高い相関関係にあるピクセルを選択し、その周りに白い円を描いて強調するためにDilation

pos = Dilation[ColorNegate[Binarize[corr, .12]], DiskMatrix[30]];

レベルを少し調整する必要がありました。レベルが高すぎると、誤検出が多く検出されてしまいます。

最後に、この結果を元の画像と組み合わせて、上記の結果を得ます。

found = ImageMultiply[waldo, ImageAdd[ColorConvert[pos, "GrayLevel"], .5]]

おすすめ記事