South_Bridge Skrevet 29. april 2009 Del Skrevet 29. april 2009 Jeg driver å programmerer i Actionscript og det jeg forsøker å gjøre er å analysere bilder. Si et bilde har flere hvite (pixelfarge) områder, jeg ønsker da å separere disse. En metode jeg har funnet heter Component Labeling: http://en.wikipedia.org/wiki/Connected_component_labeling , men jeg sliter litt med logikken av second pass. Jeg poster hva jeg har kodet sålangt: package WebCamera { import flash.display.BitmapData; import flash.geom.Point; public class ComponentLabeling { private var m_bitmapdata:BitmapData; private var m_labels:Array; public function ComponentLabeling() {} public function startLabeling(input:BitmapData):void { m_bitmapdata = input.clone(); m_labels = new Array(); FirstPass(); SecondPass(); } private function FirstPass():void { for(var y:int = 0; y < m_bitmapdata.height; y++) for( var x:int = 0; x < m_bitmapdata.width; x++ ) if ( m_bitmapdata.getPixel(x, y) == 0xFFFFFF ) { var labelArray:Array = new Array(); if ( m_bitmapdata.getPixel( x - 1, y - 1) != 0x000000 ) { labelArray = SearchLabelsForPoint(new Point(x - 1, y - 1)); } if ( m_bitmapdata.getPixel( x, y - 1) != 0x000000 ) { var temp:Array = SearchLabelsForPoint(new Point(x, y - 1)); if (temp.length < labelArray.length || labelArray.length == 0 ) labelArray = temp; } if ( m_bitmapdata.getPixel( x + 1, y + 1 ) != 0x000000 ) { var temp:Array = SearchLabelsForPoint(new Point( x + 1, y + 1 )); if (temp.length < labelArray.length || labelArray.length == 0 ) labelArray = temp; } if ( m_bitmapdata.getPixel( x - 1, y) != 0x000000 ) { var temp:Array = SearchLabelsForPoint(new Point( x - 1, y )); if (temp.length < labelArray.length || labelArray.length == 0 ) labelArray = temp; } if (labelArray.length == 0) { labelArray.push(new Point(x, y)); m_labels.push(labelArray); } else { labelArray.push(new Point(x, y)); } } } private function SecondPass():void { for(var y:int = 0; y < m_bitmapdata.height; y++) for( var x:int = 0; x < m_bitmapdata.width; x++ ) if ( m_bitmapdata.getPixel(x, y) == 0xFFFFFF ) { // ??? } } private function SearchLabelsForPoint(point:Point):Array { for each(var m:Array in m_labels) for each(var n:Point in m) if (n == point) return m; return (new Array()); } } } pastebin: http://code.bulix.org/6vye7f-70563 Dette er hobbyprosjekt for å finne områder med farger, i dette tilfelle hvit. Denne koden kan brukes til "multitouch" ved bruk av webcam Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå