[JAVA] Desktop: OpenCV Dft

Goal
Test OpenCV Dft.

OpenCV_Dft.java


package Ch14;

import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;

import java.util.ArrayList;
import java.util.List;

public class OpenCV_Dft {
    static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);};

    public static void main( String[] args )
    {
        try{
            Mat source = Imgcodecs.imread("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\lena.jpg ",Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);

            /////////////part1 optimizeImageDim
            // optimize the dimension of the loaded image
            // init
            Mat padded=new Mat();
            // get the optimal rows size for dft
            int addPixelRows = Core.getOptimalDFTSize(source.rows());
            // get the optimal cols size for dft
            int addPixelCols = Core.getOptimalDFTSize(source.cols());
            // apply the optimal cols and rows size to the image

            //Die Berechnungsgeschwindigkeit ist am besten, wenn die Skala 2, 3 und 5 Mal angepasst wird. Schnelle Berechnung,
            //將 Importierte Statue Kabuki Ausstellung Ankunft Die beste Skala,Additives Bildelement zur Initialisierung 0
            Core.copyMakeBorder(source, padded, 0, addPixelRows - source.rows(), 0, addPixelCols - source.cols(),1, Scalar.all(0));
            // return padded;
            //end part1 optimizeImageDim
            //System.out.println(padded.dump());

            //main
            //Verteilen von Tachibana Cabrio Minabe Kazuobu profitabler Raum 兩 Individuell 圖 Statue 值.傅 Tachiba-Konvertierungsergebnis multipliziert, verursacht diese sehr geringe Menge an häufigem Flächengewinn-Existenz-Float-Typ, durchschnittlicher Betrag Nummer eins außerhalb der Passage. 來 Gewinn-Existenz-Verbundteil:
            padded.convertTo(padded, CvType.CV_32F);
            List<Mat> planes = new ArrayList<Mat>();
            Mat complexImage=new Mat();
            // prepare the image planes to obtain the complex image
            planes.add(padded);
            planes.add(Mat.zeros(padded.size(), CvType.CV_32F));

            // prepare a complex image for performing the dft
            ////Nachausstellung der Ausstellung
            Core.merge(planes, complexImage);
            // dft
            //Progressive diskrete Tachiba-Umwandlung,Konvertierungsergebnis existiert Primitive Mat Rokujin
            Core.dft(complexImage, complexImage);
            //Mat magnitude = new Mat();

            // optimize the image resulting from the dft operation
            /// part2 createOptimizedMagnitude
            // init

            List<Mat> newPlanes = new ArrayList<Mat>();
            Mat mag = new Mat();
            // split the comples image in two planes
            //將 Mehrfachumwandlungsbogengrad.
            Core.split(complexImage, newPlanes);
            // compute the magnitude
            Core.magnitude(newPlanes.get(0), newPlanes.get(1), mag);
            // move to a logarithmic scale
            //Cabrio Waage
            Core.add(mag, Scalar.all(1), mag);
            Core.log(mag, mag);
            // optionally reorder the 4 quadrants of the magnitude image
            ////////////////part3 shiftDFT
            //Schnitt- und Exzenterlinie
            mag = mag.submat(new Rect(0, 0, mag.cols() & -2, mag.rows() & -2));

            //Schwere Teilung
            int cx = mag.cols() / 2;
            int cy = mag.rows() / 2;

            //Obere linke Ecke-ROI für den Aufbau eines Quadranten
            Mat q0 = new Mat(mag, new Rect(0, 0, cx, cy));
            //Obere rechte Ecke
            Mat q1 = new Mat(mag, new Rect(cx, 0, cx, cy));
            //Untere linke Ecke
            Mat q2 = new Mat(mag, new Rect(0, cy, cx, cy));
            //Untere rechte Ecke
            Mat q3 = new Mat(mag, new Rect(cx, cy, cx, cy));

            Mat tmp = new Mat();
            q0.copyTo(tmp);
            q3.copyTo(q0);
            //Quadrant austauschen:Oben links 與 unten rechts
            tmp.copyTo(q3);

            q1.copyTo(tmp);
            q2.copyTo(q1);
            //Quadrant austauschen:Oben rechts, unten links
            tmp.copyTo(q2);
            //end part3 shiftDFT

            // normalize the magnitude image for the visualization since both JavaFX
            // and OpenCV need images with value between 0 and 255
            //Normalisierung[0,255]Reichweite
            Core.normalize(mag, mag, 0,255, Core.NORM_MINMAX);
            //end part2 createOptimizedMagnitude


            //Imgproc.GaussianBlur(source1, processBlur,new Size(GaussianKernelSize,GaussianKernelSize),0,0);
            //Mat lastoutput = ConvertDFTToImage(Dft,gaussianFilter,output);
            //source.convertTo(destination, -1, alpha, beta);
            Imgcodecs.imwrite("D:\\projects\\Java\\OpenCV_Samples\\resource\\imgs\\lena-dft.jpg ", mag);
            //main end
        }catch (Exception e) {
            System.out.println("error: " + e.getMessage());
        }
    }
}

Result
![lena.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276243/697b070e-ff11-4ec5-490a-b30913b26a69.jpeg)

lena-dft.jpg

Recommended Posts

Desktop: OpenCV Dft
Desktop: OpenCV-Schwellenwert
Desktop: OpenCV BilateralFilterBlur
Desktop: OpenCV Dilate
Desktop: OpenCV-Erweiterung
Desktop: OpenCV Affine
Desktop: OpenCV Emboss
Desktop: OpenCV Ellipse2Poly
Desktop: OpenCV HDR
Desktop: OpenCV-Polylinien
Desktop: OpenCV-Schärfe
Desktop: OpenCV Concat
Desktop: OpenCV OpenCV_SalonUseBlurAddWeighted
Desktop: OpenCV-Mosaik
Desktop: OpenCV Erode
Desktop: OpenCV Denoise
Desktop: OpenCV-Rechteck
Desktop: OpenCV-Wasserscheide
Desktop: OpenCV-Text
Desktop: OpenCV Inpaint
Desktop: OpenCV NormalizeBlur
Desktop: OpenCV Canny
Desktop: OpenCV Denoise3
Desktop: OpenCV-Histogramm
Desktop: OpenCV Decolor
Desktop: OpenCV FaceDetector
Desktop: OpenCV Denoise2
Desktop: OpenCV StereoBM
Desktop: OpenCV Kirsch Filter
Desktop: OpenCV Laplace Filter 2
Desktop: OpenCV-Beleuchtungsänderung
Desktop: OpenCV WaterMark hinzufügen
Desktop: OpenCV Fill ConvexPoly
Desktop: OpenCV Grab Cut
Desktop: OpenCV Sharpness Gui
Desktop: OpenCV-Farbänderung
Desktop: OpenCV Freichennel Filter
Desktop: OpenCV Adaptive Threshold
Desktop: OpenCV Fill Poly
Desktop: OpenCV-Mittelwertfilter
Desktop: OpenCV Java Repository
Desktop: OpenCV Sobel Filter2
Desktop: OpenCV pyrMeanShift Filter
Desktop: OpenCV OpticalFlow PyrLK
Desktop: OpenCV Virtual Piano
Desktop: OpenCV-Bild zusammenführen
Desktop: OpenCV Scharr Filter
Desktop: Opencv-Webcam-Vorschau
Desktop: OpenCV-Laplace-Filter
Desktop: OpenCV Median Blur
Desktop: OpenCV Add Broad
Desktop: OpenCV-Videoaufzeichnung
Desktop: OpenCV Flood Fill
Desktop: OpenCV-Farbraum
Desktop: OpenCV SqrBox Filter
Desktop: OpenCV-Bildgröße ändern
Desktop: OpenCV-Stiftskizze
Desktop: OpenCV-Farbkarte
Desktop: OpenCV Seamless Clone
Desktop: OpenCV-Zeichenpunkt
Desktop: OpenCV Sobel Filter