rendered paste bodyprivate void button3_Click(object sender, EventArgs e)
{ //událost tlačítka
//najdi shluky A - picture 9, listbox3 --- podminka na min. velikost shluků
ShlukyA.Clear();
listBox3.Items.Clear();
listBox5.Items.Clear();
tempA = new Bitmap(pictureFiltrA);
najdiShlukyA(Convert.ToInt32(textBox5.Text)); //vstupni parametr je velikost
if (checkBox1.Checked == true) //vykresleni bounding boxu
{
pictureOznaceneShlukyA = new Bitmap(pictureLoadA);
Graphics g = Graphics.FromImage(pictureOznaceneShlukyA);
Pen rPen = new Pen(Color.Red, 3);
//listBox1.Items.Add("test: "+ Shluky.Count().ToString());
for (int i = 0; i < ShlukyA.Count(); i++)
{
int sirka = ShlukyA[i].maxX.X - ShlukyA[i].minX.X;
int vyska = ShlukyA[i].maxY.Y - ShlukyA[i].minY.Y;
//g.DrawRectangle(rPen, Shluky[i].minX.X, Shluky[i].minY.Y, Shluky[i].maxX.X - Shluky[i].minX.X, -Shluky[i].maxY.Y-Shluky[i].minY.Y);
g.DrawRectangle(rPen, ShlukyA[i].minX.X, ShlukyA[i].minY.Y, sirka, vyska);
}
rPen.Dispose();
g.Dispose();
//pictureBox5.Image = bitmapa;
pictureBox9.Image = pictureOznaceneShlukyA;
}
label13.Text = "Celkem: " +ShlukyA.Count().ToString();
if (ShlukyA.Count() > 0)
{
int min = ShlukyA[0].plocha;
int max = ShlukyA[0].plocha;
int celkem = ShlukyA[0].plocha;
for (int i = 1; i < ShlukyA.Count(); i++)
{
if (min > ShlukyA[i].plocha)
{
min = ShlukyA[i].plocha;
}
if (max < ShlukyA[i].plocha)
{
max = ShlukyA[i].plocha;
}
celkem += ShlukyA[i].plocha;
}
listBox5.Items.Add("Celkem: " + ShlukyA.Count().ToString());
listBox5.Items.Add("Min. velikost: " + min.ToString());
listBox5.Items.Add("Max. velikost: " + max.ToString());
listBox5.Items.Add("Prům. velikost: " + (celkem / ShlukyA.Count()).ToString());
}
}
private void najdiShlukyA(int min)
{
//int pocet = 0;
//Point tempPoint;
for (int y = 0; y < tempA.Height; y++)
{
for (int x = 0; x < tempA.Width; x++)
{
if (tempA.GetPixel(x, y).A > 128)
{
pixelyVZasobniku.Push(new Point(x, y));
while (pixelyVZasobniku.Count > 0)
{
Point aktualni = pixelyVZasobniku.Pop();
// Puvodni obsah metody seminko
if (aktualni.X >= 0 && aktualni.X < tempA.Width && aktualni.Y >= 0 && aktualni.Y < tempA.Height)
{
if (tempA.GetPixel(aktualni.X, aktualni.Y).A > 128)
{
pixelyJednohoShluku.Add(aktualni);
tempA.SetPixel(aktualni.X, aktualni.Y, Color.FromArgb(0, Color.Black));
pixelyVZasobniku.Push(new Point(aktualni.X - 1, aktualni.Y));
pixelyVZasobniku.Push(new Point(aktualni.X + 1, aktualni.Y));
pixelyVZasobniku.Push(new Point(aktualni.X, aktualni.Y - 1));
pixelyVZasobniku.Push(new Point(aktualni.X, aktualni.Y + 1));
}
}
}
if (pixelyJednohoShluku.Count() >= min)
{
ShlukyA.Add(new Shluk(ShlukyA.Count()));
ShlukyA[ShlukyA.Count() - 1].AddPixs(pixelyJednohoShluku);
//foreach (Point p in pixelyJednohoShluku)
//{
// ShlukyA[ShlukyA.Count() - 1].AddPix(p);
//}
int minRozmer = Convert.ToInt32(textBox9.Text);
if (ShlukyA[ShlukyA.Count() - 1].maxX.X - ShlukyA[ShlukyA.Count() - 1].minX.X <= minRozmer ||
ShlukyA[ShlukyA.Count() - 1].maxY.Y - ShlukyA[ShlukyA.Count() - 1].minY.Y <= minRozmer)
{
ShlukyA.Remove(ShlukyA[ShlukyA.Count() - 1]);
}
listBox3.Items.Add("Pocet pix : " + pixelyJednohoShluku.Count().ToString());
}
pixelyJednohoShluku.Clear(); // nekde dochazi ke smazani pixelů v ShlukuA[i].pixely ??
}
}
}
pixelyVZasobniku.Clear();
}
//trida shluku
public class Shluk
{
public int id;
public Point minY;
public Point maxY;
public Point minX;
public Point maxX;
public Point stred;
public int sirka;
public int vyska;
public int plocha;
public List<Point> pixely = new List<Point>();
public Shluk()
{ }
public Shluk(int id)
{
this.id = id;
}
public void AddPix(int x, int y)
{
this.pixely.Add(new Point(x, y));
}
public void AddPix(Point p)
{
this.pixely.Add(p);
}
public void AddPixs(List<Point> _pixely)
{
this.pixely = _pixely;
GetMinMax();
SpocitatPlochu();
SpocitatRozmery();
SpocitatStred();
}
public void SpocitatPlochu()
{
plocha = pixely.Count();
}
public void SpocitatRozmery()
{
this.sirka = Math.Abs(maxX.X - minX.X);
this.vyska = Math.Abs(maxY.Y - minY.Y);
}
public void SpocitatStred()
{
int y = ((minY.Y - maxY.Y) / 2) + maxY.Y;
int x = ((maxX.X - minX.X) / 2) + minX.X;
this.stred = new Point(x, y);
}
public void GetMinMax()
{
if (pixely.Count() > 0)
{
minX = pixely[0];
maxX = pixely[0];
minY = pixely[0];
maxY = pixely[0];
for (int i = 1; i < pixely.Count(); i++)
{
if (pixely[i].X < minX.X)
{
minX = pixely[i];
}
if (pixely[i].X > maxX.X)
{
maxX = pixely[i];
}
if (pixely[i].Y < minY.Y)
{
minY = pixely[i];
}
if (pixely[i].Y > maxY.Y)
{
maxY = pixely[i];
}
}
}
}
}