[{"data":1,"prerenderedAt":269},["ShallowReactive",2],{"project-14973741":3},{"id":4,"name":5,"line":5,"line_source":6,"title":7,"url":8,"domain":9,"maker":10,"posted_at":11,"year":12,"points":13,"comments":14,"rank_in_year":15,"shown_in_year":16,"top":17,"tier":18,"category":19,"subcategory":20,"format":21,"keywords":22,"reception":26,"sentiment":27,"stance_mix":28,"scored_comments":32,"aspects":33,"strip":40,"post_text":43,"what":44,"said":64,"maker_in_thread":141,"shape":152,"grid":156,"attempts":230,"same_week":231,"maker_shows":37,"maker_hidden":261,"reader_version":262,"card":263},"14973741","Transformation Invariant Reverse Image Search","title","Show HN: Transformation Invariant Reverse Image Search","https:\u002F\u002Fpippy360.github.io\u002FtransformationInvariantImageSearch\u002F","pippy360.github.io","pippy360",1502313641,2017,166,30,222,2242,10,"notable","ai","reverse image search","library",[20,23,24,25],"affine invariant","image hashing","perceptual hash","loved",0.424,{"positive":29,"neutral":30,"mixed":31,"critical":31},7,9,0,16,{"idea":34,"performance":36,"docs":38,"execution":39},{"positive":35,"critical":31},6,{"positive":37,"critical":31},1,{"positive":31,"critical":31},{"positive":31,"critical":31},[31,41,31,31,42,31,41,31,41,31,41,42,42,42,41,31,31,31,31,31,31,41,31,41,41,42,31,41,42,42],3,5,null,{"problem":45,"audience":43,"pricing":43,"motivation":52,"time_to_build":43,"stack":56,"openness":61,"stage":62,"team_size":63},{"value":46,"source":47,"evidence":48},"Existing reverse image search (Google, Bing, TinEye) fails to match rotated or transformed images","maker",[49],{"id":50,"by":10,"text":51},"14977981","Hey guys, I'm the guy who made this. Let me know if anything isn't clear or if you have any questions. *I developed this after I saw how poor google (and any other reverse image…",{"value":53,"source":47,"evidence":54},"Google and other reverse image search engines performed poorly on rotated images",[55],{"id":50,"by":10,"text":51},[57],{"value":58,"source":47,"evidence":59},"C++",[60],{"id":50,"by":10,"text":51},"open_source","prototype","solo",{"praise":65,"objections":82,"requests":90,"questions":109,"alternatives":124},[66],{"value":67,"source":68,"evidence":69},"Impressive, simple approach using equilateral triangle normalisation","commenter",[70,74,78],{"id":71,"by":72,"text":73},"14977509","ansgri","Good in its simplicity. Basically, they construct not-quite-but-local hyperfeatures using edge triangles and then compute a descriptor (perceptual hash) for all these…",{"id":75,"by":76,"text":77},"14981555","Sean1708","I'm amazed at how simple this is! Making the triangles equilateral is one of those things which seems so simple in hindsight but I doubt it was easy to think of, were you…",{"id":79,"by":80,"text":81},"14977215","onion2k","This is really impressive. What I particularly like is how the demo demonstrates the usefulness of the algorithm - an article about it would be interesting, but after I cropped,…",[83],{"value":84,"source":68,"evidence":85},"Number of triangles grows cubically with keypoints, so large images are too slow",[86,87],{"id":71,"by":72,"text":73},{"id":88,"by":10,"text":89},"14978201","Unfortunately it needs a huge amount of work to be production ready. I'd love to see it wrapped up in python though and I'll be continuing to work on it. The main issue you will…",[91,98],{"value":92,"source":68,"evidence":93},"Wrap it as a Python library",[94],{"id":95,"by":96,"text":97},"14977216","rcarmo","This is pretty neat. I've been using pHash to find duplicate photos across my personal library, but this seems significantly better. I'd like to wrap it as a Python library -…",{"value":99,"source":68,"evidence":100},"Support colour and compression\u002Ffilter transformations",[101,105],{"id":102,"by":103,"text":104},"14981269","jboggan","This is great, I was toying with this kind of image recognition a year or two ago and I am impressed with this. Have you considered doing other common transformations like…",{"id":106,"by":107,"text":108},"14977311","osrec","Very impressive indeed. I was wondering, how did you determine your criteria for matching (i.e. the hash distance at which two triangles are considered different)? Also, could…",[110,117],{"value":111,"source":68,"evidence":112},"How hashes are stored and matched",[113],{"id":114,"by":115,"text":116},"14981154","deevnull","That is really gorgeous, do you have anything quick written up about how your hashes are stored? I spent far too much of a few months optimizing phash to hell (I can do fuzzy…",{"value":118,"source":68,"evidence":119},"Why triangles are transformed to equilateral",[120],{"id":121,"by":122,"text":123},"14978803","activatedgeek","Hey Tom, Great work there! One question - Why are we transforming the triangles to equilateral triangles? Just throwing out a few ideas and wanted to discuss what potential flaws…",[125,130,137],{"value":126,"source":68,"evidence":127},"pHash",[128,129],{"id":95,"by":96,"text":97},{"id":114,"by":115,"text":116},{"value":131,"source":68,"evidence":132},"ASIFT (Affine SIFT)",[133,134],{"id":121,"by":122,"text":123},{"id":135,"by":122,"text":136},"14978691","ASIFT or Affine SIFT is one of the Affine invariant versions of SIFT. Take a look here - http:\u002F\u002Fwww.cmap.polytechnique.fr\u002F~yu\u002Fresearch\u002FASIFT\u002Fdemo.html.",{"value":138,"source":47,"evidence":139},"Google reverse image search",[140],{"id":50,"by":10,"text":51},{"comments":142,"answered":143,"key":144},8,4,[145,146,149],{"id":50,"text":51},{"id":147,"text":148},"14979247",">Why are we transforming the triangles to equilateral triangles? This is so that the extracted image fragments\u002Ftriangles are always very similar and so have an extremely similar…",{"id":150,"text":151},"14978160",">The big problem is, a moderately complex image can yield n³ triangles This is a big problem I have been facing. You will notice that all the images I use in my c++ demos are…",{"commenters":153,"max_depth":42,"maker_replies":142,"first_comment_mins":154,"lifespan_hours":155},19,593,46,[157,159,161,162,165,167,169,173,175,178,180,184,188,189,190,192,196,198,202,203,205,207,208,211,214,217,219,220,223,226],[50,31,31,158,10,37],"maker\u002Fneutral\u002Fnone",[121,31,41,160,122,31],"maker\u002Fneutral\u002Fidea",[147,31,31,160,10,37],[163,31,31,164,122,31],"14979840","commenter\u002Fneutral\u002Fidea",[71,37,42,166,72,31],"project\u002Fpositive\u002Fidea",[150,37,31,168,10,37],"maker\u002Fneutral\u002Fperformance",[170,37,41,171,172,31],"14978966","project\u002Fneutral\u002Fperformance","bobosha",[174,37,31,168,10,37],"14979406",[176,37,41,171,177,31],"14978696","alkoumpa",[179,37,31,168,10,37],"14979454",[181,37,41,182,183,31],"14982152","project\u002Fneutral\u002Fidea","JepZ",[185,186,42,166,187,31],"14981462",2,"zfedoran",[79,41,42,166,80,31],[102,143,42,166,103,31],[114,42,41,191,115,31],"maker\u002Fneutral\u002Fdocs",[193,35,31,194,195,31],"14977190","other\u002Fpositive\u002Fidea","tw1010",[197,35,31,164,72,31],"14977555",[199,35,31,200,201,31],"14978588","other\u002Fneutral\u002Fidea","lscharen",[135,35,31,200,122,31],[204,35,31,164,72,31],"14980259",[206,35,31,182,10,37],"14979497",[106,29,41,160,107,31],[209,29,31,210,10,37],"14978085","maker\u002Fneutral\u002Fexecution",[212,142,41,210,213,31],"14985199","rosenbus",[215,30,41,191,216,31],"14981531","mendeza",[95,17,42,218,96,31],"project\u002Fpositive\u002Fperformance",[88,17,31,168,10,37],[221,17,41,182,222,31],"14979211","aidos",[75,224,42,225,76,31],11,"maker\u002Fpositive\u002Fidea",[227,228,42,166,229,31],"14993029",12,"sova",[],[232,237,242,247,252,257],{"id":233,"name":234,"points":235,"category":236},"14947361","Is the stock market going to crash?",813,"finance_crypto",{"id":238,"name":239,"points":240,"category":241},"14957201","unwttng.com",256,"learning_science",{"id":243,"name":244,"points":245,"category":246},"14950699","Eliot and Me Estimator",220,"web_saas",{"id":248,"name":249,"points":250,"category":251},"14947449","AsciiDots",148,"languages",{"id":253,"name":254,"points":255,"category":256},"14919534","RESTful Doom",136,"games",{"id":258,"name":259,"points":260,"category":256},"14939748","Twitch Plays Doom",113,false,"v2",{"id":264,"name":5,"line":5,"ai":261,"cat":19,"year":12,"points":13,"comments":14,"rec":26,"s":265,"top":17,"kw":266,"maker":10,"domain":9,"tier":18,"attempts":31,"strip":267,"url":8,"mix":268,"praise":67,"objection":84,"sub":20},14973741,0.42,[20,23,24,25],"030050303035553000000303350355",[29,30,31,31],1794036558050]