예제 #1
0
        public int[,] GetEE(ElEst el, int rx, int ry)
        {
            int lengthX = (2 * rx + 1), lengthY = (2 * ry + 1);;

            int[,] EE = new int[lengthX, lengthY];
            switch (el)
            {
            case ElEst.circulo:
            case ElEst.cruz:
                for (int x = 0; x < lengthX; x++)
                {
                    for (int y = 0; y < lengthY; y++)
                    {
                        if (x == (rx - 1) / 2 || y == (ry - 1) / 2)
                        {
                            EE[x, y] = 255;
                        }
                        else
                        {
                            EE[x, y] = -1;
                        }
                    }
                }
                break;

            case ElEst.ponto:
                EE[(rx - 1) / 2, (ry - 1) / 2] = 255;
                break;

            case ElEst.quadrado:
                for (int x = 0; x < lengthX; x++)
                {
                    for (int y = 0; y < lengthY; y++)
                    {
                        EE[x, y] = 255;
                    }
                }
                break;

            case ElEst.quadradoCinza:
                for (int x = 0; x < lengthX; x++)
                {
                    for (int y = 0; y < lengthY; y++)
                    {
                        EE[x, y] = 1;
                    }
                }
                EE[rx / 2, ry / 2] = 2;
                break;
            }
            return(EE);
        }
예제 #2
0
        public void Erosao(ElEst el, int rx, int ry, Imagem B)
        {
            int x, y, i, j, c, w = MatrizCor.Width, h = MatrizCor.Height;

            int[,] ee;
            if (B == null)
            {
                ee = GetEE(el, rx, ry);
            }
            else
            {
                ee = GetEE(B);
                rx = B.MatrizCor.Width / 2;
                ry = B.MatrizCor.Height / 2;
            }

            bool iguais;
            var  aux = new int[w, h, 3];

            for (c = 0; c < 3; c++)
            {
                for (x = rx; x < w - rx; x++)
                {
                    for (y = ry; y < h - ry; y++)
                    {
                        iguais = true;
                        for (i = -rx; i <= rx && iguais; i++)
                        {
                            for (j = -ry; j <= ry && iguais; j++)
                            {
                                if (ee[rx + i, ry + j] >= 0)
                                {
                                    iguais = MatrizCor.Matriz[x + i, y + j, c] == ee[rx + i, ry + j];
                                }
                            }
                        }
                        aux[x, y, c] = iguais ? 255 : 0;
                    }
                }
            }
            this.MatrizCor.Matriz = aux;
        }
예제 #3
0
        public void DilatacaoCinza(ElEst el, int rx, int ry)
        {
            Imagem img = this;

            int[,] ee = GetEE(el, rx, ry);
            int    h     = this.MatrizCor.Height;
            int    w     = this.MatrizCor.Width;
            Imagem saida = new Imagem();

            saida.Clone(this);
            int x, y, c, i, j, max, aux;

            for (c = 0; c < 3; c++)
            {
                for (x = rx; x < (w - rx); x++)
                {
                    for (y = ry; y < (h - ry); y++)
                    {
                        aux = 0;
                        for (i = -rx; i <= rx; i++)
                        {
                            for (j = -ry; j <= ry; j++)
                            {
                                max = img.MatrizCor.Matriz[x + i, y + j, c] + (ee[rx + i, ry + j]);
                                if (max > aux)
                                {
                                    aux = max;
                                }
                            }
                        }
                        saida.MatrizCor.Matriz[x, y, c] = aux;
                    }
                }
            }

            this.MatrizCor = saida.MatrizCor;
        }