Portfolio[UWM] Techniki Multimedialne / PIRO

Filtr Minimalny

Zadanie
Zaimplementować filtr minimalny gdzie w i h oznaczają rozmiar sąsiedztwa brany pod uwagę, gdzie obie te wartości muszą być nieparzyste.

Do obrazu wynikowego jest kopiowania minimalna wartość przyjmowana przez punkty sąsiadujące z punktem "wybranym" przez środek maski. Filtrowi minimalnemu towarzyszy efekt "erozji" (zmniejszenie) wielkości obiektów obrazu.

ma parametry funkcji:
  • _BitMap źródło obrazka,
  • _W szerokość macierzy,
  • _H wysokość macierzy,

BitMap filterMin(BitMap _BitMap, int _W, int _H)
{
	// utworzenie wyczyszczonej nowej bitmapy ( wartość 0 dla danej składowej )
	BitMap oNew = _BitMap;
	oNew.Pixels = Clear(_BitMap);

	// proces przetwarzania 
	for(int y = 0; y < _BitMap.Height; y++)
		for(int x = 0; x < _BitMap.Width; x++)
		{
			// utworzenie możliwego maksymalnego piksela
			Pix oResult_Pix;
			oResult_Pix.Light = 255;
			oResult_Pix.Red = 255;
			oResult_Pix.Green = 255;
			oResult_Pix.Blue = 255;

			for(int my = 0; my < _H; my++)
				for(int mx = 0; mx < _W; mx++)
				{
					int oX = x - _W/2 + mx;
					int oY = y - _H/2 + my;
					if(oX >= _BitMap.Width || oX < 0 || oY >= _BitMap.Height || oY < 0)
						continue;

					// pobranie danego piksela orginalnego 
					Pix oPix = Get_PIX(oX, oY, _BitMap);

					// sprawdzenie składowych czy są mniejsze... 
					oResult_Pix.Light = min(oPix.Light, oResult_Pix.Light);
					oResult_Pix.Red = min(oPix.Red, oResult_Pix.Red);
					oResult_Pix.Green = min(oPix.Green, oResult_Pix.Green);
					oResult_Pix.Blue = min(oPix.Blue, oResult_Pix.Blue);
				}

			// zapisanie piksela do nowej bitmapy 
			Set_PIX(x, y, oResult_Pix, oNew);
		}
	return oNew;
} 


Filtr Maksymalny

Zadanie
Zaimplementować filtr maksymalny gdzie w i h oznaczają rozmiar sąsiedztwa brany pod uwagę, gdzie obie te wartości muszą być nieparzyste.

Do obrazu wynikowego jest kopiowania maksymalna wartość przyjmowana przez punkty sąsiadujące z punktem "wybranym" przez środek maski. Filtrowi maksymalnemu towarzyszy efekt "dylatacja" (powiększenie) wielkości obiektów obrazu.

ma parametry funkcji:
  • _BitMap źródło obrazka,
  • _W szerokość macierzy,
  • _H wysokość macierzy,

BitMap filterMax(BitMap _BitMap, int _W, int _H)
{
	// utworzenie wyczyszczonej nowej bitmapy ( wartość 0 dla danej składowej )
	BitMap oNew = _BitMap;
	oNew.Pixels = Clear(_BitMap);

	// proces przetwarzania 
	for(int y = 0; y < _BitMap.Height; y++)
		for(int x = 0; x < _BitMap.Width; x++)
		{
			// utworzenie możliwego minimalnego piksela
			Pix oResult_Pix;
			oResult_Pix.Light = 0;
			oResult_Pix.Red = 0;
			oResult_Pix.Green = 0;
			oResult_Pix.Blue = 0;


			for(int my = 0; my < _H; my++)
				for(int mx = 0; mx < _W; mx++)
				{
					int oX = x - _W/2 + mx;
					int oY = y - _H/2 + my;
					if(oX >= _BitMap.Width || oX < 0 || oY >= _BitMap.Height || oY < 0)
						continue;

					// pobranie danego piksela orginalnego 
					Pix oPix = Get_PIX(oX, oY, _BitMap);

					// sprawdzenie składowych czy są mniejsze... 
					oResult_Pix.Light = max(oPix.Light, oResult_Pix.Light);
					oResult_Pix.Red = max(oPix.Red, oResult_Pix.Red);
					oResult_Pix.Green = max(oPix.Green, oResult_Pix.Green);
					oResult_Pix.Blue = max(oPix.Blue, oResult_Pix.Blue);
				}

			// zapisanie piksela do nowej bitmapy 
			Set_PIX(x, y, oResult_Pix, oNew);
		}
	return oNew;
}

  • Administracja