Portfolio[UWM] Techniki Multimedialne / PIRO

Groszki - Muszki


Zadanie
zaimplementować algorytmy który będzie wykrywać prawidłowe kształtne i zdrowe groszki. (-_-)

Obrazem wynikowym będzie bitmapa, zawierająca informacje o prawidłowych groszkach po przez zamalowanie groszków na zielono

ma parametry funkcji: 
  • _BitMap źródło obrazka, 
  • _Level granica do binaryzacji 
  • _Min ilość pikseli przypadająca na groszka

Realizacja funkcji.
BitMap Find(BitMap _BitMap, int _Level, int _Min)
{
	// Pomocnicze piksele
	Pix vMin;
	vMin.Red = 0;
	vMin.Green = 0;
	vMin.Blue = 0;

	Pix vMax;
	vMax.Red = 255;
	vMax.Green = 0;
	vMax.Blue = 255;

	// Binaryzacja
	BitMap oBinary = _BitMap;
	oBinary.Pixels = Clone(_BitMap);
	for(int y = 0; y < _BitMap.Height; y++)
		for(int x = 0; x < _BitMap.Width; x++)
		{
			Pix oPix = Get_PIX(x, y, _BitMap);
			Set_PIX(x, y, vMin, oBinary);
			if( (oPix.Red + oPix.Blue + oPix.Green)/3 > _Level )
				Set_PIX(x, y, vMax, oBinary);
		}

	BitMap oFind = _BitMap;
	oFind.Pixels = Clear(_BitMap);

	//BitMap oInfo = _BitMap;
	//oInfo.Pixels = Clear(_BitMap);
	for(int y = 0; y < oBinary.Height; y++)
		for(int x = 0; x < oBinary.Width; x++)
		{
			
			Pix oBPix = Get_PIX(x, y, oBinary);			
			Pix oFPix = Get_PIX(x, y, oFind);			
			if(oBPix.Red == 255 && oFPix.Red == 0)
			{
				int oFindINT = FindOBJ(oBinary, oFind, x, y, 255);
				printf("oFindINT : %d
",oFindINT);
				if(oFindINT < _Min)
					FindOBJ(oBinary, oFind, x, y, 0);
				else
				{
					Pix vCenter;
					vCenter.Red = 0;
					vCenter.Green = 255;
					vCenter.Blue = 255;
					Set_PIX(x, y, vCenter, oFind);

				}
				//oFind = add(oFind, oFind);
			}
		}

	return oFind;
}
Przedstawiona funkcja poniżej, jest funkcją rekuracyjną, potrzebną do zliczenia danej sfery (obiektu)
int FindOBJ(BitMap _Bin, BitMap _Info, int _X, int _Y, int _Set)
{
	Pix oIPix = Get_PIX(_X, _Y, _Info);
	if(oIPix.Red == _Set)
		return 0;

	int oSum = 0;
	Pix oBPix = Get_PIX(_X, _Y, _Bin);
	if(oBPix.Red == 255)
	{
		Pix vMax;
		vMax.Red = _Set;
		vMax.Green = 0;
		vMax.Blue = _Set;
		Set_PIX(_X, _Y, vMax, _Info);
		oSum++;
		oSum += FindOBJ( _Bin, _Info, _X-1, _Y, _Set);
		oSum += FindOBJ( _Bin, _Info, _X+1, _Y, _Set);
		oSum += FindOBJ( _Bin, _Info, _X, _Y+1, _Set);
		oSum += FindOBJ( _Bin, _Info, _X, _Y-1, _Set);
	}
	return oSum;
}

  • Administracja