Thresholding — это метод сегментации изображений, в общем он используется для создания бинарных изображений. Thresholding бывает двух типов, а именно: простой порог и адаптивный порог.
Простой порог
В простой операции порогового значения пикселям, значения которых превышают указанное пороговое значение, присваивается стандартное значение.
Вы можете выполнить простую пороговую операцию над изображением, используя метод threshold () класса Imgproc. Ниже приведен синтаксис этого метода.
threshold(src, dst, thresh, maxval, type)
Этот метод принимает следующие параметры —
-
src — Объект класса Mat, представляющий исходное (входное) изображение.
-
dst — Объект класса Mat, представляющий целевое (выходное) изображение.
-
thresh — переменная типа double, представляющая пороговое значение.
-
maxval — переменная типа double, представляющая значение, которое должно быть задано, если значение пикселя превышает пороговое значение.
-
тип — переменная целочисленного типа, представляющая тип порога, который будет использоваться.
src — Объект класса Mat, представляющий исходное (входное) изображение.
dst — Объект класса Mat, представляющий целевое (выходное) изображение.
thresh — переменная типа double, представляющая пороговое значение.
maxval — переменная типа double, представляющая значение, которое должно быть задано, если значение пикселя превышает пороговое значение.
тип — переменная целочисленного типа, представляющая тип порога, который будет использоваться.
пример
Следующая программа демонстрирует, как выполнить простую операцию порогового изображения для изображения в OpenCV.
import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; public class Thresh { public static void main(String args[]) { // Loading the OpenCV core library System.loadLibrary( Core.NATIVE_LIBRARY_NAME ); // Reading the Image from the file and storing it in to a Matrix object String file ="E:/OpenCV/chap14/thresh_input.jpg"; Mat src = Imgcodecs.imread(file); // Creating an empty matrix to store the result Mat dst = new Mat(); Imgproc.threshold(src, dst, 50, 255, Imgproc.THRESH_BINARY); // Writing the image Imgcodecs.imwrite("E:/OpenCV/chap14/thresh_trunc.jpg", dst); System.out.println("Image Processed"); } }
Предположим, что следующим является входное изображение thresh_input.jpg, указанное в вышеуказанной программе.
Выход
При выполнении программы вы получите следующий вывод:
Image Processed
Если вы откроете указанный путь, вы можете наблюдать выходное изображение следующим образом —
Другие виды простых порогов
В дополнение к операции THRESH_BINARY, продемонстрированной в предыдущем примере, OpenCV обслуживает различные другие типы пороговых операций. Все эти типы представлены предопределенными статическими полями (фиксированными значениями) класса Imgproc .
Вы можете выбрать нужный тип пороговой операции, передав соответствующее предопределенное значение параметру с именем type для метода threshold () .
Imgproc.threshold(src, dst, 50, 255, Imgproc.THRESH_BINARY );
Ниже приведены значения, представляющие различные типы пороговых операций и их соответствующие выходы.