Java DIP - Miglioramento della nitidezza dell'immagine

In questo capitolo impariamo ad aumentare la nitidezza di un'immagine usando il filtro gaussiano.

Per prima cosa usiamo OpenCV funzione GaussianBlur. Può essere trovato sottoImgprocpacchetto. La sua sintassi è data di seguito:

Imgproc.GaussianBlur(source, destination, new Size(0,0), sigmaX);

I parametri sono descritti brevemente:

Sr.No. Parametro e descrizione
1

source

È l'immagine di origine.

2

destination

È l'immagine di destinazione.

3

Size

È la dimensione del kernel gaussiana.

4

sigmaX

È la deviazione standard del kernel gaussiano in direzione X.

Inoltre, usiamo OpenCV funzione addWeightedper applicare la filigrana all'immagine. Può essere trovato sottoCorepacchetto. La sua sintassi è data di seguito:

Core.addWeighted(InputArray src1, alpha, src2, beta, gamma, OutputArray dst);

I parametri di questa funzione sono descritti di seguito:

Sr.No. Parametro e descrizione
1

src1

È il primo array di input.

2

alpha

È il peso dei primi elementi dell'array.

3

src2

È il secondo array di input della stessa dimensione e numero di canale di src1.

4

Beta

È il peso dei secondi elementi dell'array.

5

gamma

È scalare aggiunto a ciascuna somma.

6

dst

È un array di output che ha la stessa dimensione e numero di canali degli array di input.

Oltre al metodo GaussianBlur, ci sono altri metodi forniti dalla classe Imgproc. Sono descritti brevemente:

Sr.No. Metodo e descrizione
1

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

Converte un'immagine da uno spazio colore a un altro.

2

dilate(Mat src, Mat dst, Mat kernel)

Dilata un'immagine utilizzando uno specifico elemento strutturante.

3

equalizeHist(Mat src, Mat dst)

Equalizza l'istogramma di un'immagine in scala di grigi.

4

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

Convolge un'immagine con il kernel.

5

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

Sfoca un'immagine usando un filtro gaussiano.

6

integral(Mat src, Mat sum)

Calcola l'integrale di un'immagine.

Esempio

L'esempio seguente mostra l'uso di Imgproc e della classe Core per applicare la nitidezza a un'immagine:

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
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());
         Imgproc.GaussianBlur(source, destination, new Size(0,0), 10);
         Core.addWeighted(source, 1.5, destination, -0.5, 0, destination);
         Highgui.imwrite("sharp.jpg", destination);
      } catch (Exception e) {
      }
   }
}

Produzione

Quando esegui il codice dato, viene visualizzato il seguente output:

Immagine originale

Immagine nitida