private void Esqueleto_Click(object sender, EventArgs e)
        {
            Imagem process = new Imagem();
            Imagem entrada = new Imagem();
            Imagem op      = new Imagem();
            Imagem saida   = new Imagem();

            saida.CreatePlainImage(imagens[count - 1].MatrizCor.Width, imagens[count - 1].MatrizCor.Height, 0);
            process.Clone(imagens[count - 1]); //armazena a saida
            entrada.Clone(imagens[count - 1]); //armazena a entrada erodida
            op.Clone(imagens[count - 1]);      //Imagem que sofre abertura

            while (!entrada.IsNull())
            {
                op.Erosao(ElEst.quadrado, 1, 1, null); op.Dilatacao(ElEst.quadrado, 1, 1, null);
                process.MathOp(MathOperationType.subtracao, op);
                saida.LogicOp(LogicOperationType.or, process);
                entrada.Erosao(ElEst.quadrado, 3, 3, null);
                process.Clone(entrada);
                op.Clone(entrada);
            }
            Imagem combo = new Imagem();

            combo.Clone(imagens[count - 1]);
            Visualizar(saida, "Esqueletização " + saida.NomeArquivo());
            combo.MathOp(MathOperationType.subtracao, saida);
            combo.CorrecaoMinMax(Correcao.limiar);
            Visualizar(combo, "Esqueletização " + saida.NomeArquivo());
        }
        private void Smoothing_Click(object sender, EventArgs e)
        {
            Imagem erod = new Imagem();

            erod.Clone(imagens[count - 1]);
            erod.ErosaoCinza(ElEst.quadradoCinza, 1, 1);
            Visualizar(erod, "Erosão " + erod.NomeArquivo());
            Imagem dil = new Imagem();

            dil.Clone(imagens[count - 1]);
            dil.DilatacaoCinza(ElEst.quadradoCinza, 1, 1);
            dil.CorrecaoMinMax(Correcao.proporcao);
            Visualizar(dil, "Abertura " + dil.NomeArquivo());
            Imagem dil2 = new Imagem();

            dil2.Clone(imagens[count - 1]);
            dil2.DilatacaoCinza(ElEst.quadradoCinza, 1, 1);
            dil2.CorrecaoMinMax(Correcao.proporcao);
            Visualizar(dil2, "Dilatação " + dil2.NomeArquivo());
            Imagem erod2 = new Imagem();

            erod2.Clone(imagens[count - 1]);
            erod2.ErosaoCinza(ElEst.quadradoCinza, 1, 1);
            Visualizar(erod2, "Fechamento -> Smoothing" + erod2.NomeArquivo());
        }
        private void MediaImagens_Click(object sender, EventArgs e)
        {
            Imagem imagem = new Imagem();

            imagem.Clone(imagens[count - 1]);
            bool cond = true;
            int  k    = 1;

            while (k < count && cond)
            {
                cond = imagem.MatrizCor.Width >= imagens[k].MatrizCor.Width && imagem.MatrizCor.Height >= imagens[k++].MatrizCor.Height;
            }
            if (cond)
            {
                for (k = 1; k < count; k++)
                {
                    imagem.MathOp(MathOperationType.adicao, imagens[k]);
                }
                Imagem divisor = new Imagem();
                divisor.CreatePlainImage(imagem.MatrizCor.Width, imagem.MatrizCor.Height, count);
                imagem.MathOp(MathOperationType.divisao, divisor);
                Visualizar(imagem, "Média de " + (count) + " imagens");
            }
            else
            {
                MessageBox.Show("Imagens possuem resoluções diferentes!");
            }
        }
        private void AcertoEErro_Click(object sender, EventArgs e)
        {
            Imagem A  = new Imagem();
            Imagem Ac = new Imagem();

            A.Clone(imagens[count - 1]);
            Ac.Clone(A);
            Ac.LogicOp(LogicOperationType.not, null);
            Imagem B = GetImagemB();

            B.ToInt();
            Visualizar(B);
            Imagem B1 = new Imagem();
            Imagem B2 = new Imagem();

            B1.Clone(B);
            B2.Clone(B);
            B2.AddBorder(1, 1, 0);
            B2.LogicOp(LogicOperationType.not, null);
            A.Erosao(ElEst.quadrado, 1, 1, B1);
            Ac.Erosao(ElEst.quadrado, 1, 1, B2);
            A.LogicOp(LogicOperationType.and, Ac);
            A.Dilatacao(ElEst.quadrado, 1, 1, null);
            Visualizar(A);

            //W.MathOp(MathOperationType.subtracao, B, 1);
            //Visualizar(B, "Teste");
            //A.Dilatacao(ElEst.quadrado, 1, 1, null);
            //A.CorrecaoMinMax(Correcao.limiar);
            //Visualizar(A, "Dilatação " + A.NomeArquivo());
        }
 private void Visualizar(Imagem imagem, string text)
 {
     if (imagem != null)
     {
         if (imagem.MatrizCor.Matriz != null)
         {
             imagem.ToImage();
         }
         PictureBox pb = new PictureBox
         {
             Height      = imagem.ImagemBMP.Height,
             Width       = imagem.ImagemBMP.Width,
             Image       = imagem.ImagemBMP,
             MaximumSize = new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height),
             SizeMode    = PictureBoxSizeMode.Zoom
         };
         imagens.Add(imagem);
         count++;
         Visualizador visualizador = new Visualizador
         {
             Text     = text,
             AutoSize = true
         };
         visualizador.Controls.Add(pb);
         visualizador.Show();
         pictureBox1.Image = imagens[count - 1].ImagemBMP;
     }
 }
        private void Erosao_Click(object sender, EventArgs e)
        {
            Imagem B = new Imagem();

            B.Clone(imagens[count - 1]);
            B.Erosao(ElEst.quadrado, 1, 1, null);
            Visualizar(B, "Erosão " + B.NomeArquivo());
        }
        private void InverterCores_Click(object sender, EventArgs e)
        {
            Imagem imagem = new Imagem();

            imagem.Clone(imagens[count - 1]);
            imagem.InverterCores();
            Visualizar(imagem, "Inverso " + imagem.NomeArquivo());
        }
        private void Histograma_Click_1(object sender, EventArgs e)
        {
            Imagem imagem = new Imagem();

            imagem.Clone(imagens[count - 1]);
            imagem.CorrecaoHistograma();
            Visualizar(imagem, "Histograma Corrigido " + imagem.NomeArquivo());
        }
        private void LaplaceToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Imagem imagem = new Imagem();

            imagem.Clone(imagens[count - 1]);
            imagem.Bordas(EdgeDetection.Laplace);
            Visualizar(imagem, "Bordas Laplace " + imagem.NomeArquivo());
        }
        private void PassaAltaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Imagem imagem = new Imagem();

            imagem.Clone(imagens[count - 1]);
            imagem.FiltroPassaAlta();;
            Visualizar(imagem, "Filtro Passa-Alta " + imagem.NomeArquivo());
        }
        private void BordasIsotropico_Click(object sender, EventArgs e)
        {
            Imagem imagem = new Imagem();

            imagem.Clone(imagens[count - 1]);
            imagem.Bordas(EdgeDetection.Isotropico);
            Visualizar(imagem, "Bordas Isotrópico " + imagem.NomeArquivo());
        }
        private void DilataçãoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Imagem B = new Imagem();

            B.Clone(imagens[count - 1]);
            B.Dilatacao(ElEst.quadrado, 1, 1, null);
            Visualizar(B, "Dilatação " + B.NomeArquivo());
        }
        private void TonsDeCinzaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Imagem imagem = new Imagem();

            imagem.Clone(imagens[count - 1]);
            imagem.ToGray();
            Visualizar(imagem);
        }
        private void wavefrontToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Imagem B = new Imagem();

            B.Clone(imagens[count - 1]);
            B.Wavefront();
            B.CorrecaoMinMax(Correcao.proporcao);
            Visualizar(B, "Erosão " + B.NomeArquivo());
        }
        private void DilatacaoCinza_Click(object sender, EventArgs e)
        {
            Imagem B = new Imagem();

            B.Clone(imagens[count - 1]);
            B.DilatacaoCinza(ElEst.quadradoCinza, 1, 1);
            B.CorrecaoMinMax(Correcao.proporcao);
            Visualizar(B, "Erosão " + B.NomeArquivo());
        }
        private void DtAperiodicoDispersao_Click(object sender, EventArgs e)
        {
            Dithering dithering = new Dithering();
            Imagem    B         = new Imagem();

            B.Clone(imagens[count - 1]);
            if (dithering.ShowDialog() == DialogResult.OK)
            {
                B.ToAperiodicoDispersao(dithering.Vizinhos);
                Visualizar(B, "Dithering " + dithering.Dispersao + "X" + dithering.Dispersao + " " + imagens[count - 1].NomeArquivo() + imagens[count - 1].ExtensaoArquivo());
            }
        }
        private void LogicNot_Click(object sender, EventArgs e)
        {
            var count2 = count;

            for (int k = 0; k < count2; k++)
            {
                Imagem imagem = new Imagem();
                imagem.Clone(imagens[k]);
                imagem.LogicOp(LogicOperationType.not, null);
                Visualizar(imagem, "NOT " + imagem.NomeArquivo());
            }
        }
        private void Limiar_Click(object sender, EventArgs e)
        {
            Dithering dithering = new Dithering();
            Imagem    B         = new Imagem();

            B.Clone(imagens[count - 1]);
            if (dithering.ShowDialog() == DialogResult.OK)
            {
                B.ToLimiar(dithering.Limiar);
                Visualizar(B);
            }
        }
        private void OpQuantizacao_Click(object sender, EventArgs e)
        {
            Quantizacao quant  = new Quantizacao();
            Imagem      imagem = new Imagem();

            imagem.Clone(imagens[count - 1]);
            if (quant.ShowDialog() == DialogResult.OK)
            {
                imagem.ToQuant(quant.niveis);
                Visualizar(imagem);
            }
        }
        private void FiltroMediana_Click(object sender, EventArgs e)
        {
            var    raioFiltro = new RaioFiltro();
            Imagem imagem     = new Imagem();

            imagem.Clone(imagens[count - 1]);
            if (raioFiltro.ShowDialog() == DialogResult.OK)
            {
                imagem.FiltroMediana(raioFiltro.raio);
                Visualizar(imagem);
            }
        }
        private void LimiarComRuido_Click(object sender, EventArgs e)
        {
            Dithering dithering = new Dithering();
            Imagem    B         = new Imagem();

            B.Clone(imagens[count - 1]);
            if (dithering.ShowDialog() == DialogResult.OK)
            {
                B.ToLimiarAleatorio(dithering.Limiar, dithering.Rinf, dithering.Rsup);
                Visualizar(B);
            }
        }
        private void PeriodicoPorAglomeracao_Click(object sender, EventArgs e)
        {
            Dithering dithering = new Dithering();
            Imagem    B         = new Imagem();

            B.Clone(imagens[count - 1]);
            if (dithering.ShowDialog() == DialogResult.OK)
            {
                B.ToQuant(dithering.Dispersao * dithering.Dispersao + 1);
                B.ToPeriodicoAglomeracao(dithering.Dispersao);
                Visualizar(B, "Dithering Aglomeração" + dithering.Dispersao + "X" + dithering.Dispersao + " " + imagens[count - 1].NomeArquivo() + imagens[count - 1].ExtensaoArquivo());
            }
        }
Esempio n. 23
0
        public int[,] GetEE(Imagem B)
        {
            int x, y;

            int[,] EE = new int[B.MatrizCor.Width, B.MatrizCor.Height];
            for (x = 0; x < B.MatrizCor.Width; x++)
            {
                for (y = 0; y < B.MatrizCor.Height; y++)
                {
                    EE[x, y] = B.MatrizCor.Matriz[x, y, 0];
                }
            }
            return(EE);
        }
        private void Fechamento_Click(object sender, EventArgs e)
        {
            Imagem dil = new Imagem();

            dil.Clone(imagens[count - 1]);
            dil.Dilatacao(ElEst.quadrado, 1, 1, null);
            dil.CorrecaoMinMax(Correcao.limiar);
            Visualizar(dil, "Dilatação " + dil.NomeArquivo());
            Imagem erod = new Imagem();

            erod.Clone(imagens[count - 1]);
            erod.Erosao(ElEst.quadrado, 1, 1, null);
            Visualizar(erod, "Fechamento " + erod.NomeArquivo());
        }
        private void BordaExterna_Click(object sender, EventArgs e)
        {
            Imagem dil = new Imagem();

            dil.Clone(imagens[count - 1]);
            dil.Dilatacao(ElEst.quadrado, 1, 1, null);
            Visualizar(dil, "Dilatação " + dil.NomeArquivo());
            Imagem borda = new Imagem();

            borda.Clone(imagens[count - 1]);
            borda.MathOp(MathOperationType.subtracao, imagens[count - 2]);
            borda.CorrecaoMinMax(Correcao.limiar);
            Visualizar(borda, "Borda Externa " + borda.NomeArquivo());
        }
        private void BordaInterna_Click(object sender, EventArgs e)
        {
            Imagem erod = new Imagem();

            erod.Clone(imagens[count - 1]);
            erod.Erosao(ElEst.quadrado, 1, 1, null);
            Visualizar(erod, "Erosão " + erod.NomeArquivo());
            Imagem borda = new Imagem();

            borda.Clone(imagens[count - 2]);
            borda.MathOp(MathOperationType.subtracao, imagens[count - 1]);
            borda.CorrecaoMinMax(Correcao.limiar);
            Visualizar(borda, "Borda Interna " + borda.NomeArquivo());
        }
        private void LogicSub_Click(object sender, EventArgs e)
        {
            Imagem imagem = new Imagem();

            imagem.Clone(imagens[0]);
            if (count == 1)
            {
                Visualizar(GetImagemB());
            }
            for (int k = 1; k < count; k++)
            {
                imagem.LogicOp(LogicOperationType.sub, imagens[k]);
            }
            Visualizar(imagem, "SUB");
        }
        private void SubtracaoMedia_Click(object sender, EventArgs e)
        {
            Imagem imagem = new Imagem();

            imagem.Clone(imagens[0]);
            if (count == 1)
            {
                Visualizar(GetImagemB());
            }
            for (int k = 1; k < count; k++)
            {
                imagem.MathOp(MathOperationType.subtracao, imagens[k]);
            }
            imagem.CorrecaoMinMax(Correcao.proporcao);
            Visualizar(imagem, "Subtração Corrigida");
        }
        private void Divisao_Click(object sender, EventArgs e)
        {
            Imagem imagem = new Imagem();

            imagem.Clone(imagens[0]);
            if (count == 1)
            {
                Visualizar(GetImagemB());
            }
            for (int k = 1; k < count; k++)
            {
                imagem.MathOp(MathOperationType.divisao, imagens[k]);
            }
            imagem.CorrecaoMinMax(Correcao.proporcao);
            Visualizar(imagem, "Divisão");
        }
        private void Adicao_Click(object sender, EventArgs e)
        {
            Imagem imagem = new Imagem();

            imagem.Clone(imagens[0]);
            if (count == 1)
            {
                Visualizar(GetImagemB());
            }
            for (int k = 1; k < count; k++)
            {
                imagem.MathOp(MathOperationType.adicao, imagens[k]);
            }
            imagem.CorrecaoMinMax(Correcao.limiar);
            Visualizar(imagem, "Soma Limiar");
        }