Nasıl Sturm ile Waldo bulabilirim?
Bu hafta sonu kafamı kurcalıyordu: Where's Waldo? bunları çözmek için iyi bir yoldur [Ne'' . Wally Kuzey Amerika dışında] bulmaca, Sturm (görüntü işleme ve diğer işlevler) kullanarak?
Şu ana kadar öğrendiklerimi burada, karartma görsel karmaşıklık biraz azaltan bir işlev non-kırmızı renkleri: biraz
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}]
]
Ve bir URL bir örnek bu 'işleri':
whereIsWaldo["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"]
(Waldo yazarkasa) tarafından
CEVAP
Waldo buldum!
Bunu yaptım nasıl
İlk olarak, kırmızı olmayan tüm renkler filtreleyerek ediyorum
waldo = Import["http://www.findwaldo.com/fankit/graphics/IntlManOfLiterature/Scenes/DepartmentStore.jpg"];
red = Fold[ImageSubtract, #[[1]], Rest[#]] &@ColorSeparate[waldo];
Gelecek, siyah ve beyaz basit bir desen ile bu görüntü korelasyon gömlek kırmızı ve beyaz geçişleri bulmak için hesaplıyorum.
corr = ImageCorrelate[red,
Image@Join[ConstantArray[1, {2, 4}], ConstantArray[0, {2, 4}]],
NormalizedSquaredEuclideanDistance];
Binarize
yeterince yüksek bir korelasyon ile görüntü pikselleri seçmek ve etrafında beyaz bir daire onları Dilation
kullanarak vurgulamak çizmek için kullanacağım
pos = Dilation[ColorNegate[Binarize[corr, .12]], DiskMatrix[30]];
Biraz seviye ile oynamak zorunda kaldım. Eğer seviyesi çok yüksek ise, çok fazla yanlış pozitif seçti.
Son olarak, orijinal görüntü ile bu sonuç yukarıda almak için bir araya geldim
found = ImageMultiply[waldo, ImageAdd[ColorConvert[pos, "GrayLevel"], .5]]
Nerede böyle büyük mükafat düzenleyici...
Nasıl gözler yollarını canavar deliğe ...
Nasıl benim Python sitesi-paketleri di...
Nasıl geçerli yöntemi olarak adlandırı...
Nasıl hesapların yapılabilmesi dizi il...