Java DIP - Umbral básico

La creación de umbrales permite lograr la segmentación de imágenes de la manera más sencilla. La segmentación de imágenes significa dividir la imagen completa en un conjunto de píxeles de tal manera que los píxeles de cada conjunto tengan algunas características comunes. La segmentación de imágenes es muy útil para definir objetos y sus límites.

En este capítulo realizamos algunas operaciones básicas de umbralización en imágenes.

Usamos OpenCV función threshold. Se puede encontrar enImgprocpaquete. Su sintaxis se da a continuación:

Imgproc.threshold(source, destination, thresh , maxval , type);

Los parámetros se describen a continuación:

No Señor. Descripción de parámetros
1

source

Es la imagen de origen.

2

destination

Es imagen de destino.

3

thresh

Es el valor umbral.

4

maxval

Es el valor máximo que se utilizará con los tipos de umbral THRESH_BINARY y THRESH_BINARY_INV.

5

type

Los tipos posibles son THRESH_BINARY, THRESH_BINARY_INV, THRESH_TRUNC y THRESH_TOZERO.

Aparte de estos métodos de umbral, hay otros métodos proporcionados por la clase Imgproc. Se describen brevemente:

No Señor. Método y descripción
1

cvtColor(Mat src, Mat dst, int code, int dstCn)

Convierte una imagen de un espacio de color a otro.

2

dilate(Mat src, Mat dst, Mat kernel)

Dilata una imagen utilizando un elemento estructurante específico.

3

equalizeHist(Mat src, Mat dst)

Ecualiza el histograma de una imagen en escala de grises.

4

filter2D(Mat src, Mat dst, int ddepth, Mat kernel, Point anchor, double delta)

Convierte una imagen con el kernel.

5

GaussianBlur(Mat src, Mat dst, Size ksize, double sigmaX)

Desenfoca una imagen usando un filtro gaussiano.

6

integral(Mat src, Mat sum)

Calcula la integral de una imagen.

Ejemplo

El siguiente ejemplo demuestra el uso de la clase Imgproc para realizar operaciones de umbral en una imagen:

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class main {
   public static void main( String[] args ) {
   
      try{

         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         Mat source = Highgui.imread("digital_image_processing.jpg",  Highgui.CV_LOAD_IMAGE_COLOR);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());

         destination = source;
         Imgproc.threshold(source,destination,127,255,Imgproc.THRESH_TOZERO);
         Highgui.imwrite("ThreshZero.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("error: " + e.getMessage());
      }
   }
}

Salida

Cuando ejecuta el código dado, se ve el siguiente resultado:

Imagen original

En la imagen original anterior, se realizan algunas operaciones de umbral que se muestran en el resultado a continuación:

Thresh binario

Thresh Binary Invertir

Thresh Zero