Gå til innhold

Anbefalte innlegg

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...