public Erozja(Bitmap obrazZr, OurBitmap obrazWe, ElementStrukt elS) { this.obrazWe = obrazWe; this.obrazZr = obrazZr; this.elS = elS; this.obrazWy = new Bitmap(obrazZr.Width, obrazZr.Height); }
public GradientMorfoDylatacja(Bitmap obrazZr, OurBitmap obrazWe, ElementStrukt elS) { this.obrazWe = obrazWe; this.obrazZr = obrazZr; this.elS = elS; }
// Potrzebne, aby wykonać poszczególne operacje na krawędziach obrazka /* --- Rozszerzanie obrazka - ew. wyodrębnić jako kolejną klasę --- */ private OurBitmap rozszerzObraz(Bitmap obrazWejsciowy, int wielkoscElementu) { // Trochę pochrzanione z indeksami, ale działa ;-) OurBitmap obrazTmp = new OurBitmap(obrazWejsciowy.Width + 2 * wielkoscElementu, obrazWejsciowy.Height + 2 * wielkoscElementu); int t; for (int k1 = 0; k1 < obrazTmp.image.Height; k1++) { for (int k2 = 0; k2 < obrazTmp.image.Width; k2++) { // PASKI if (k2 >= wielkoscElementu && k2 <= (wielkoscElementu + (obrazWejsciowy.Width-1)) && k1 < wielkoscElementu) { t = obrazWejsciowy.GetPixel(k2 - wielkoscElementu, 0).R; obrazTmp.image.SetPixel(k2, k1, Color.FromArgb(t, t, t)); } else if (k2 >= wielkoscElementu && k2 <= (wielkoscElementu + (obrazWejsciowy.Width - 1)) && k1 > (wielkoscElementu + (obrazWejsciowy.Height - 1))) { t = obrazWejsciowy.GetPixel(k2 - wielkoscElementu, obrazWejsciowy.Height - 1).R; obrazTmp.image.SetPixel(k2, k1, Color.FromArgb(t, t, t)); } else if (k2 < wielkoscElementu && k1 >= wielkoscElementu && k1 <= (wielkoscElementu + (obrazWejsciowy.Height-1))) { t = obrazWejsciowy.GetPixel(0, k1 - wielkoscElementu).R; obrazTmp.image.SetPixel(k2, k1, Color.FromArgb(t, t, t)); } else if (k2 > (wielkoscElementu + (obrazWejsciowy.Width-1)) && k1 >= wielkoscElementu && k1 <= (wielkoscElementu + (obrazWejsciowy.Height-1))) { t = obrazWejsciowy.GetPixel(obrazWejsciowy.Width - 1, k1 - wielkoscElementu).R; obrazTmp.image.SetPixel(k2, k1, Color.FromArgb(t, t, t)); } // ROGI else if (k2 < wielkoscElementu && k1 < wielkoscElementu) { t = obrazWejsciowy.GetPixel(0, 0).R; obrazTmp.image.SetPixel(k2, k1, Color.FromArgb(t, t, t)); } else if (k2 > (wielkoscElementu + (obrazWejsciowy.Width-1)) && k1 < wielkoscElementu) { t = obrazWejsciowy.GetPixel(obrazWejsciowy.Width - 1, 0).R; obrazTmp.image.SetPixel(k2, k1, Color.FromArgb(t, t, t)); } else if (k2 < wielkoscElementu && k1 > (wielkoscElementu + (obrazWejsciowy.Height-1))) { t = obrazWejsciowy.GetPixel(0, obrazWejsciowy.Height - 1).R; obrazTmp.image.SetPixel(k2, k1, Color.FromArgb(t, t, t)); } else if (k2 > (wielkoscElementu + (obrazWejsciowy.Width-1)) && k1 > (wielkoscElementu + (obrazWejsciowy.Height-1))) { t = obrazWejsciowy.GetPixel(obrazWejsciowy.Width - 1, obrazWejsciowy.Height - 1).R; obrazTmp.image.SetPixel(k2, k1, Color.FromArgb(t, t, t)); } // POZOSTAŁE else { t = obrazWejsciowy.GetPixel(k2 - wielkoscElementu, k1 - wielkoscElementu).R; obrazTmp.image.SetPixel(k2, k1, Color.FromArgb(t, t, t)); } } } return obrazTmp; }