Java DIP - Hızlı Kılavuz

Dijital Görüntü İşleme (DIP), dijital bir bilgisayar kullanılarak dijital görüntülerin işlenmesiyle ilgilenir. Sinyallerin ve sistemlerin bir alt alanıdır ancak özellikle görüntülere odaklanır. DIP, bir görüntü üzerinde işlem yapabilen bir bilgisayar sistemi geliştirmeye odaklanır. Böyle bir sistemin girişi dijital bir görüntüdür. Sistem, görüntüyü verimli algoritmalar kullanarak işler ve çıktı olarak bir görüntü verir.

Java, modern dünyada yaygın olarak kullanılan üst düzey bir programlama dilidir. Çeşitli işlevleri kullanarak dijital görüntü işlemeyi verimli bir şekilde destekleyebilir ve yönetebilir.

Java BufferedImagesınıfı, Image sınıfının bir alt sınıfıdır. Görüntü verilerini işlemek ve işlemek için kullanılır. A BufferedImage, görüntü verilerinin ColorModel'inden yapılır. Tüm BufferedImagenesnelerin sol üst köşe koordinatı (0, 0) 'dır.

İnşaatçılar

Bu sınıf, üç tür yapıcıyı destekler.

İlk yapıcı BufferedImage, belirli bir ColorModel ve Raster ile yeni bir yapı oluşturur .

BufferedImage(ColorModel cm, WritableRaster raster, 
boolean isRasterPremultiplied, Hashtable<?,?> properties)

İkinci yapıcı BufferedImage, önceden tanımlanmış görüntü tiplerinden birini oluşturur.

BufferedImage(int width, int height, int imageType)

Üçüncü kurucu BufferedImage, önceden tanımlanmış görüntü türlerinden birini oluşturur: TYPE_BYTE_BINARY veya TYPE_BYTE_INDEXED.

BufferedImage(int width, int height, int imageType, IndexColorModel cm)

Sr.No Yöntem ve Açıklama
1

copyData(WritableRaster outRaster)

Rastgele bir dikdörtgen bölgesini hesaplar BufferedImageve bunu belirtilen bir WritableRaster'a kopyalar.

2

getColorModel()

Bir görüntünün ColorModel sınıfının nesnesini döndürür.

3

getData()

Görüntüyü tek bir büyük karo olarak döndürür.

4

getData(Rectangle rect)

Keyfinin rastgele bir bölgesini hesaplar ve döndürür BufferedImage.

5

getGraphics()

Bu yöntem bir Graphics2D döndürür, geriye dönük uyumluluğu korur.

6

getHeight()

Bu yüksekliğini döndürür BufferedImage.

7

getMinX()

Bunun minimum x koordinatını döndürür BufferedImage.

8

getMinY()

Bunun minimum y koordinatını döndürür BufferedImage.

9

getRGB(int x, int y)

Varsayılan RGB renk modelinde (TYPE_INT_ARGB) ve varsayılan sRGB renk alanında bir tamsayı pikseli döndürür.

10

getType()

Görüntü türünü döndürür.

Misal

Aşağıdaki örnek, BufferedImageGraphics Object kullanarak ekrana bir miktar metin çizen java sınıfının kullanımını gösterir -

import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test extends JPanel {

   public void paint(Graphics g) {
      Image img = createImageWithText();
      g.drawImage(img, 20,20,this);
   }

   private Image createImageWithText() {
      BufferedImage bufferedImage = new BufferedImage(200,200,BufferedImage.TYPE_INT_RGB);
      Graphics g = bufferedImage.getGraphics();

      g.drawString("www.tutorialspoint.com", 20,20);
      g.drawString("www.tutorialspoint.com", 20,40);
      g.drawString("www.tutorialspoint.com", 20,60);
      g.drawString("www.tutorialspoint.com", 20,80);
      g.drawString("www.tutorialspoint.com", 20,100);
      
      return bufferedImage;
   }
   
   public static void main(String[] args) {
      JFrame frame = new JFrame();
      frame.getContentPane().add(new Test());

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(200, 200);
      frame.setVisible(true);
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Bu bölümde internetten bir görüntüyü nasıl indirebileceğinizi, görüntü üzerinde bazı görüntü işleme tekniklerini nasıl uygulayabileceğinizi ve ardından işlenen görüntüyü tekrar bir sunucuya yükleyebileceğinizi göreceğiz.

Bir Görüntüyü İndirme

Bir web sitesinden bir görsel indirmek için, adlı java sınıfını kullanıyoruz. URL, altında bulunabilir java.netpaketi. Söz dizimi aşağıda verilmiştir -

String website = "http://tutorialspoint.com";
URL url = new URL(website);

Yukarıdaki yöntemin dışında, kısaca açıklandığı gibi sınıf URL'sinde kullanılabilen başka yöntemler de vardır -

Sr.No. Yöntem ve Açıklama
1

public String getPath()

URL'nin yolunu döndürür.

2

public String getQuery()

URL'nin sorgu kısmını döndürür.

3

public String getAuthority()

URL'nin yetkisini döndürür.

4

public int getPort()

URL'nin bağlantı noktasını döndürür.

5

public int getDefaultPort()

URL protokolü için varsayılan bağlantı noktasını döndürür.

6

public String getProtocol()

URL'nin protokolünü döndürür.

7

public String getHost()

URL'nin ana bilgisayarını döndürür.

Misal

Aşağıdaki örnek, internetten bir resim indirmek için java URL sınıfının kullanımını göstermektedir -

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import java.net.URL;

public class Download {

   public static void main(String[] args) throws Exception {
   
      try{
         String fileName = "digital_image_processing.jpg";
         String website = "http://tutorialspoint.com/java_dip/images/"+fileName;
         
         System.out.println("Downloading File From: " + website);
         
         URL url = new URL(website);
         InputStream inputStream = url.openStream();
         OutputStream outputStream = new FileOutputStream(fileName);
         byte[] buffer = new byte[2048];
         
         int length = 0;
         
         while ((length = inputStream.read(buffer)) != -1) {
            System.out.println("Buffer Read of length: " + length);
            outputStream.write(buffer, 0, length);
         }
         
         inputStream.close();
         outputStream.close();
         
      } catch(Exception e) {
         System.out.println("Exception: " + e.getMessage());
      }
   }
}

Çıktı

Yukarıda verilenleri çalıştırdığınızda aşağıdaki çıktı görülür.

Sunucudan aşağıdaki görüntüyü indirecektir.

Bir Görüntü Yükleme

Bir web sunucusuna nasıl resim yükleneceğini görelim. Sunucuya göndermek için BufferedImage'ı bayt dizisine dönüştürüyoruz.

Java sınıfı kullanıyoruz ByteArrayOutputStream, altında bulunabilir java.iopaketi. Söz dizimi aşağıda verilmiştir -

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", baos);

Görüntüyü bayt dizisine dönüştürmek için kullanıyoruz toByteArray() yöntemi ByteArrayOutputStreamsınıf. Söz dizimi aşağıda verilmiştir -

byte[] bytes = baos.toByteArray();

Yukarıdaki yöntemin dışında, kısaca açıklandığı gibi ByteArrayOutputStream sınıfında kullanılabilen başka yöntemler de vardır -

Sr.No. Yöntem ve Açıklama
1

public void reset()

Bu yöntem, bayt dizisi çıktı akışının geçerli bayt sayısını sıfıra sıfırlar, böylece akıştaki tüm birikmiş çıktı atılır.

2

public byte[] toByteArray()

Bu yöntem, yeni ayrılmış bir Byte dizisi oluşturur. Boyutu, çıktı akışının o andaki boyutu olacaktır ve tamponun içeriği ona kopyalanacaktır. Çıkış akışının geçerli içeriğini bayt dizisi olarak döndürür.

3

public String toString()

Arabellek içeriğini bir dizeye dönüştürür. Çeviri, varsayılan karakter kodlamasına göre yapılacaktır. Arabelleğin içeriğinden çevrilen String'i döndürür.

4

public void write(int w)

Belirtilen diziyi çıktı akışına yazar.

5

public void write(byte []b, int of, int len)

Offset off'tan başlayarak akışa len bayt sayısını yazar.

6

public void writeTo(OutputStream outSt)

Bu Akışın tüm içeriğini belirtilen akış bağımsız değişkenine yazar.

Misal

Aşağıdaki örnek, ByteArrayOutputStream'in bir görüntüyü sunucuya yüklemesini gösterir -

Müşteri kodu

import javax.swing.*;  
import java.net.*; 
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class Client{
   public static void main(String args[]) throws Exception{
   
      Socket soc;
      BufferedImage img = null;
      soc=new Socket("localhost",4000);
      System.out.println("Client is running. ");
      
      try {
         System.out.println("Reading image from disk. ");
         img = ImageIO.read(new File("digital_image_processing.jpg"));
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         
         ImageIO.write(img, "jpg", baos);
         baos.flush();
         
         byte[] bytes = baos.toByteArray();
         baos.close();
         
         System.out.println("Sending image to server. ");
         
         OutputStream out = soc.getOutputStream(); 
         DataOutputStream dos = new DataOutputStream(out);
         
         dos.writeInt(bytes.length);
         dos.write(bytes, 0, bytes.length);
         
         System.out.println("Image sent to server. ");

         dos.close();
         out.close();
         
      } catch (Exception e) {
         System.out.println("Exception: " + e.getMessage());
         soc.close();
      }
      soc.close();
   }
}

Sunucu Kodu

import java.net.*;
import java.io.*;
import java.awt.image.*;

import javax.imageio.*; 
import javax.swing.*; 

class Server {
   public static void main(String  args[]) throws Exception{
      ServerSocket server=null;
      Socket socket;
      server = new ServerSocket(4000);
      System.out.println("Server Waiting for image");

      socket = server.accept();
      System.out.println("Client connected.");
      
      InputStream in = socket.getInputStream();
      DataInputStream dis = new DataInputStream(in);

      int len = dis.readInt();
      System.out.println("Image Size: " + len/1024 + "KB");
      
      byte[] data = new byte[len];
      dis.readFully(data);
      dis.close();
      in.close();

      InputStream ian = new ByteArrayInputStream(data);
      BufferedImage bImage = ImageIO.read(ian);
 
      JFrame f = new JFrame("Server");
      ImageIcon icon = new ImageIcon(bImage);
      JLabel l = new JLabel();
      
      l.setIcon(icon);
      f.add(l);
      f.pack();
      f.setVisible(true);
   }
}

Çıktı

İstemci Tarafı Çıkışı

İstemci kodunu çalıştırdığınızda, istemci tarafında aşağıdaki çıktı görünür -

Sunucu Tarafı Çıkışı

Sunucu kodunu çalıştırdığınızda, sunucu tarafında aşağıdaki çıktı belirir -

Görüntüyü aldıktan sonra, sunucu görüntüyü aşağıda gösterildiği gibi görüntüler -

Bir görüntü iki boyutlu bir piksel dizisi içerir. Aslında bir görüntüyü oluşturan bu piksellerin değeridir. Genellikle bir görüntü renkli veya gri tonlamalı olabilir.

Java'da, BufferedImage sınıfı görüntüleri işlemek için kullanılır. Araman gerekgetRGB() yöntemi BufferedImage Pikselin değerini almak için sınıf.

Piksel Değeri Almak

Piksel değeri aşağıdaki sözdizimi kullanılarak alınabilir−

Color c = new Color(image.getRGB(j, i));

RGB Değerlerini Alma

Yöntem getRGB()satır ve sütun indeksini parametre olarak alır ve uygun pikseli döndürür. Renkli görüntü durumunda, (Kırmızı, Yeşil, Mavi) olan üç değer döndürür. Aşağıdaki gibi alınabilirler−

c.getRed();
c.getGreen();
c.getBlue();

Görüntünün Genişliğini ve Yüksekliğini Alma

Görüntünün yüksekliği ve genişliği şu çağrı ile alınabilir getWidth() ve getHeight()BufferedImage sınıfının yöntemleri. Söz dizimi aşağıda verilmiştir given

int width = image.getWidth();
int height = image.getHeight();

Bu yöntemlerin dışında BufferedImage sınıfında desteklenen başka yöntemler de vardır. Kısaca açıklanmıştır−

Sr.No. Yöntem ve Açıklama
1

copyData(WritableRaster outRaster)

BufferedImage'ın rastgele bir dikdörtgen bölgesini hesaplar ve bunu belirtilen bir WritableRaster'a kopyalar.

2

getColorModel()

Bir görüntünün ColorModel'ini döndürür.

3

getData()

Görüntüyü tek bir büyük karo olarak döndürür.

4

getData(Rectangle rect)

BufferedImage'ın rastgele bir bölgesini hesaplar ve döndürür.

5

getGraphics()

Bu yöntem bir Graphics2D döndürür, ancak geriye dönük uyumluluk için buradadır.

6

getHeight()

BufferedImage'ın yüksekliğini döndürür.

7

getMinX()

Bu BufferedImage'ın minimum x koordinatını döndürür.

8

getMinY()

Bu BufferedImage'ın minimum y koordinatını döndürür.

9

getRGB(int x, int y)

Varsayılan RGB renk modelinde (TYPE_INT_ARGB) ve varsayılan sRGB renk alanında bir tamsayı pikseli döndürür.

10

getType()

Görüntü türünü döndürür.

Misal

Aşağıdaki örnek, boyuttaki bir görüntünün piksellerini (100 x 100) görüntüleyen java BufferedImage sınıfının kullanımını gösterir -

import java.awt.*;
import java.awt.image.BufferedImage;

import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

class Pixel {
   BufferedImage image;
   int width;
   int height;
   
   public Pixel() {
      try {
         File input = new File("blackandwhite.jpg");
         image = ImageIO.read(input);
         width = image.getWidth();
         height = image.getHeight();
         
         int count = 0;
         
         for(int i=0; i<height; i++) {
         
            for(int j=0; j<width; j++) {
            
               count++;
               Color c = new Color(image.getRGB(j, i));
               System.out.println("S.No: " + count + " Red: " + c.getRed() +"  Green: " + c.getGreen() + " Blue: " + c.getBlue());
            }
         }

      } catch (Exception e) {}
   }
   
   static public void main(String args[]) throws Exception {
      Pixel obj = new Pixel();
   }
}

Çıktı

Yukarıdaki örneği çalıştırdığınızda, aşağıdaki görüntünün piksellerini yazdıracaktır -

Original Image

Pixels Output

Çıkışı aşağı kaydırırsanız, aşağıdaki desen görülür−

Renkli bir görüntüyü Gri Tonlamalı görüntüye dönüştürmek için, görüntünün piksellerini veya verilerini okumanız gerekir. File ve ImageIO nesneler ve görüntüyü BufferedImagenesne. Söz dizimi aşağıda verilmiştir -

File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);

Ayrıca, yöntemi kullanarak piksel değerini alın getRGB()ve üzerinde GrayScale () yöntemini uygulayın. GetRGB () yöntemi, parametre olarak satır ve sütun dizinini alır.

Color c = new Color(image.getRGB(j, i));
int red = (c.getRed() * 0.299);
int green =(c.getGreen() * 0.587);
int blue = (c.getBlue() *0.114);

Bu üç yöntemin yanı sıra, Color sınıfında kısaca açıklandığı gibi başka yöntemler de vardır -

Sr.No. Yöntem ve Açıklama
1

brighter()

Bu Rengin daha parlak bir versiyonu olan yeni bir Renk yaratır.

2

darker()

Bu Rengin daha koyu bir versiyonu olan yeni bir Renk yaratır.

3

getAlpha()

0-255 aralığında alfa bileşenini döndürür.

4

getHSBColor(float h, float s, float b)

HSB renk modeli için belirtilen değerlere dayalı olarak bir Color nesnesi oluşturur.

5

HSBtoRGB(float hue, float saturation, float brightness)

HSB modeli tarafından belirtildiği gibi bir rengin bileşenlerini varsayılan RGB modeli için eşdeğer bir değer kümesine dönüştürür.

6

toString()

Bu Rengin bir dize gösterimini döndürür.

Son adım, tüm bu üç değeri eklemek ve tekrar karşılık gelen piksel değerine ayarlamaktır. Söz dizimi aşağıda verilmiştir -

int sum = red+green+blue;
Color newColor = new Color(sum,sum,sum);
image.setRGB(j,i,newColor.getRGB());

Misal

Aşağıdaki örnek, bir görüntüyü Gri Tonlamaya dönüştüren Java BufferedImage sınıfının kullanımını gösterir -

import java.awt.*;
import java.awt.image.BufferedImage;

import java.io.*;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class GrayScale {

   BufferedImage  image;
   int width;
   int height;
   
   public GrayScale() {
   
      try {
         File input = new File("digital_image_processing.jpg");
         image = ImageIO.read(input);
         width = image.getWidth();
         height = image.getHeight();
         
         for(int i=0; i<height; i++) {
         
            for(int j=0; j<width; j++) {
            
               Color c = new Color(image.getRGB(j, i));
               int red = (int)(c.getRed() * 0.299);
               int green = (int)(c.getGreen() * 0.587);
               int blue = (int)(c.getBlue() *0.114);
               Color newColor = new Color(red+green+blue,
               
               red+green+blue,red+green+blue);
               
               image.setRGB(j,i,newColor.getRGB());
            }
         }
         
         File ouptut = new File("grayscale.jpg");
         ImageIO.write(image, "jpg", ouptut);
         
      } catch (Exception e) {}
   }
   
   static public void main(String args[]) throws Exception {
      GrayScale obj = new GrayScale();
   }
}

Çıktı

Verilen örneği yürüttüğünüzde, görüntüyü dönüştürür digital_image_processing.jpg eşdeğer Gri Tonlamalı görüntüsüne ve sabit diske şu adla yazın: grayscale.jpg.

Gerçek görüntü

Gri Tonlamalı Görüntü

Bu bölümde, histogram eşitlemeyi kullanarak bir görüntünün kontrastını nasıl geliştireceğinizi öğrenin.

Kullanıyoruz OpenCV işlevi equalizeHist()yöntem. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

Imgproc.equalizeHist(source, destination);

Parametreler aşağıda açıklanmıştır -

Sr.No. Parametre ve Açıklama
1

Source

8 bitlik tek kanallı kaynak görüntüsüdür.

2

Destination

Hedef görüntüdür.

EquizeHist () yönteminin yanı sıra, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir görüntünün kontrastını geliştirmek için Imgproc sınıfının kullanımını gösterir -

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import org.opencv.imgproc.Imgproc;

public class Main {

   static int width;
   static int height;
   static double alpha = 2;
   static double beta = 50;
   
   public static void main( String[] args ) {
   
      try {
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         Mat source = Highgui.imread("grayscale.jpg", 
         Highgui.CV_LOAD_IMAGE_GRAYSCALE);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());
         
         Imgproc.equalizeHist(source, destination);
         Highgui.imwrite("contrast.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Gelişmiş Kontrast Resmi

Bu bölümde, görüntünün her pikselini bir alfa değeriyle çarpıp ona başka bir beta değeri ekleyerek görüntünün parlaklığını artırıyoruz.

Biz OpenCV işlevi convertTobu, yukarıdaki işlemi otomatik olarak yapar. Altında bulunabilirMatpaketi. Söz dizimi aşağıda verilmiştir -

int alpha = 2;
int beta = 50;
sourceImage.convertTo(destination, rtype , alpha, beta);

Parametreler aşağıda açıklanmıştır -

Sr.No. Parametre ve Açıklama
1

destination

Hedef görüntüdür.

2

rtype

Bu, istenen çıktı matris türü veya daha doğrusu derinliktir, çünkü kanalların sayısı girişin sahip olduğu sayı ile aynıdır. rtype negatifse, çıktı matrisi girdi ile aynı türe sahip olacaktır.

3

alpha

İsteğe bağlı ölçek faktörüdür.

4

beta

Ölçekli değerlere eklenen isteğe bağlı deltadır.

ConvertTo yönteminin yanı sıra, Mat sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

adjustROI(int dtop, int dbottom, int dleft, int dright)

Üst matris içindeki bir alt matris boyutunu ve konumunu ayarlar.

2

copyTo(Mat m)

Matrisi başka birine kopyalar.

3

diag()

Bir matristen bir köşegen çıkarır veya köşegen bir matris oluşturur.

4

dot(Mat m)

İki vektörün iç çarpımını hesaplar.

5

reshape(int cn)

Verileri kopyalamadan bir 2D matrisin şeklini ve / veya kanal sayısını değiştirir.

6

submat(Range rowRange, Range colRange)

Dikdörtgen bir alt matris çıkarır.

Misal

Aşağıdaki örnek, bir görüntünün parlaklığını geliştirmek için Mat sınıfının kullanımını göstermektedir -

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;

public class Main {
   static int width;
   static int height;
   static double alpha = 2;
   static double beta = 50;
   
   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());
         source.convertTo(destination, -1, alpha, beta);
         Highgui.imwrite("brightWithAlpha2Beta50.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("error:" + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Gelişmiş Parlak Görüntü (Alpha = 1 & Beta = 50)

Geliştirilmiş Parlak Görüntü (Alpha = 2 & Beta = 50)

Bu bölümde Gauss filtresi kullanarak bir görüntünün keskinliğini artırmayı öğreneceğiz.

İlk önce kullanıyoruz OpenCV işlevi GaussianBlur. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

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

Parametreler kısaca açıklanmıştır -

Sr.No. Parametre ve Açıklama
1

source

Kaynak görüntüdür.

2

destination

Hedef görüntüdür.

3

Size

Gauss çekirdek boyutudur.

4

sigmaX

X yönünde Gauss kernel standart sapmasıdır.

Dahası, kullanıyoruz OpenCV işlevi addWeightedgörüntüye filigran uygulamak için. Altında bulunabilirCorepaketi. Söz dizimi aşağıda verilmiştir -

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

Bu işlevin parametreleri aşağıda açıklanmıştır -

Sr.No. Parametre ve Açıklama
1

src1

İlk girdi dizisidir.

2

alpha

İlk dizi elemanlarının ağırlığıdır.

3

src2

Src1 ile aynı boyut ve kanal numarasına sahip ikinci giriş dizisidir.

4

Beta

İkinci dizi elemanlarının ağırlığıdır.

5

gamma

Her toplama skaler eklenir.

6

dst

Girdi dizileriyle aynı boyut ve sayıda kanala sahip çıktı dizisidir.

GaussianBlur yönteminden ayrı olarak, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir görüntüye keskinleştirme uygulamak için Imgproc ve Core sınıfının kullanımını gösterir -

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) {
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Keskinleştirilmiş Görüntü

Bir görüntü, Java aracılığıyla kolayca sıkıştırılabilir ve saklanabilir. Görüntünün sıkıştırılması, bir görüntünün jpg'ye dönüştürülmesini ve saklanmasını içerir.

Bir görüntüyü sıkıştırmak için görüntüyü okur ve BufferedImage nesnesine dönüştürürüz.

Ayrıca, bir ImageWriter alıyoruz. getImageWritersByFormatName()ImageIO sınıfında bulunan yöntem. Bu ImageWriter'dan birImageWriteParamnesne. Söz dizimi aşağıda verilmiştir -

Iterator<ImageWriter> list = ImageIO.getImageWritersByFormatName("jpg");
ImageWriteParam obj = writer_From_List.getDefaultWriteParam();

Bu ImageWriteParam nesnesinden, bu iki yöntemi çağırarak sıkıştırmayı ayarlayabilirsiniz. setCompressionMode() ve setCompressionQuality(). Sözdizimleri aşağıda verildiği gibidir -

obj.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
obj.setCompressionQuality(0.05f);

SetCompressionMode () yöntemi, parametre olarak Mode_EXPLICIT alır. Diğer MODLARIN bazıları kısaca açıklanmıştır -

Sr.No. Modları
1

MODE_DEFAULT

Bu özelliği gelecekteki yazmalar için etkinleştirmek üzere yöntemlere aktarılabilen sabit bir değerdir.

2

MODE_DISABLED

Gelecekteki yazmalar için bu özelliği devre dışı bırakmak üzere yöntemlere geçirilebilecek sabit bir değerdir.

3

MODE_EXPLICIT

Bu özelliği gelecekteki yazmalar için etkinleştirmek üzere yöntemlere aktarılabilen sabit bir değerdir.

Sıkıştırma yöntemlerinin yanı sıra, ImageWriteParam sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

canOffsetTiles()

Yazar, yazarken sıfır olmayan ızgara ofsetleriyle döşeme yapabiliyorsa, true döndürür.

2

getBitRate(float quality)

Verilen kalite seviyesinde girdi görüntü verisinin her biti için çıktı verisinin bit sayısının tahminini gösteren bir kayan nokta döndürür.

3

getLocale()

Geçerli olarak ayarlanmış Yerel Ayarı döndürür veya yalnızca varsayılan bir Yerel Ayar destekleniyorsa null.

4

isCompressionLossless()

Geçerli sıkıştırma türü kayıpsız sıkıştırma sağlıyorsa true döndürür.

5

unsetCompression()

Önceki tüm sıkıştırma türlerini ve kalite ayarlarını kaldırır.

6

unsetTiling()

SetTiling çağrılarıyla belirtilen önceki tüm karo ızgarası parametrelerini kaldırır.

Misal

Aşağıdaki örnek, bir görüntüyü sıkıştırmak için ImageWriteParam sınıfının kullanımını gösterir -

import java.io.*;
import java.util.*;
import java.awt.image.*;

import javax.imageio.*;
import javax.imageio.stream.ImageOutputStream;

class Compression {

   public static void main(String[] args) throws IOException {
   
      File input = new File("digital_image_processing.jpg");
      BufferedImage image = ImageIO.read(input);

      File compressedImageFile = new File("compress.jpg");
      OutputStream os =new FileOutputStream(compressedImageFile);

      Iterator<ImageWriter>writers =  ImageIO.getImageWritersByFormatName("jpg");
      ImageWriter writer = (ImageWriter) writers.next();

      ImageOutputStream ios = ImageIO.createImageOutputStream(os);
      writer.setOutput(ios);

      ImageWriteParam param = writer.getDefaultWriteParam();
      
      param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
      param.setCompressionQuality(0.05f);
      writer.write(null, new IIOImage(image, null, null), param);
      
      os.close();
      ios.close();
      writer.dispose();
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, görüntüyü sıkıştırır digital_image_processing.jpg eşdeğer sıkıştırılmış görüntüsüne ve sabit diske adıyla yazar compress.jpg.

Gerçek görüntü

Sıkıştırılmış Görüntü - Kalite Faktörü - 0,05

Sıkıştırılmış Görüntü - Kalite Faktörü - 0,5

Bu bölümde bir resme farklı türlerde kenarlıklar eklemeyi öğreneceğiz.

Kullanırız OpenCV işlevi copyMakeBorder. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

Imgproc.copyMakeBorder(source,destination,top,bottom,left,right,borderType);

Parametreler aşağıda açıklanmıştır -

Sr.No. Parametre ve Açıklama
1

source

Kaynak görüntüdür.

2

destination

Hedef görüntüdür.

3

top

Görüntünün üst kısmındaki kenarlığın piksel cinsinden uzunluğudur.

4

bottom

Görüntünün altındaki kenarlığın piksel cinsinden uzunluğu.

5

left

Görüntünün solundaki kenarlığın piksel cinsinden uzunluğudur.

6

right

Görüntünün sağ tarafındaki kenarlığın piksel cinsinden uzunluğudur.

7

borderType

Kenarlık tipini tanımlar. Olası sınırlar: BORDER_REPLICATE, BORDER_REFLECT, BORDER_WRAP, BORDER_CONSTANT vb.

CopyMakeBorder () yönteminin yanı sıra, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir görüntüye kenarlık eklemek için Imgproc sınıfının kullanımını gösterir -

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());
         
         int top, bottom, left, right;
         int borderType;

         /// Initialize arguments for the filter
         top = (int) (0.05*source.rows()); 
         bottom = (int) (0.05*source.rows());
         left = (int) (0.05*source.cols()); 
         right = (int) (0.05*source.cols());

         destination = source;
         Imgproc.copyMakeBorder(source, destination, top, bottom, left, right, Imgproc.BORDER_WRAP);
         Highgui.imwrite("borderWrap.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

İzole Kenarlık Resmi

Sarmalanmış Kenarlık Resmi

Kenarlık Resmini Yansıt

Görüntü piramidi, çok çözünürlüklü bir görüntüyü görüntüleme yönteminden başka bir şey değildir. En alt katman, görüntünün en yüksek çözünürlüklü sürümüdür ve en üst katman, görüntünün en düşük çözünürlüklü sürümüdür. Görüntü piramitleri, farklı ölçeklerdeki görüntüyü işlemek için kullanılır.

Bu bölümde, görüntüler üzerinde bazı aşağı örnekleme ve yukarı örnekleme gerçekleştiriyoruz.

Kullanırız OpenCV fonksiyonlar pyrUp ve pyrDown. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

Imgproc.pyrUp(source, destination, destinationSize);
Imgproc.pyrDown(source, destination,destinationSize);

Parametreler aşağıda açıklanmıştır -

Sr.No. Parametre ve Açıklama
1

source

Kaynak görüntüdür.

2

destination

Hedef görüntüdür.

3

destinationSize

Çıktı görüntüsünün boyutudur. Varsayılan olarak, Boyut ((src.cols * 2), (src.rows * 2)) olarak hesaplanır.

PyrUp ve pyrDown yöntemlerinden ayrı olarak, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir görüntü üzerinde yukarı örnekleme ve aşağı örnekleme gerçekleştirmek için Imgproc sınıfının kullanımını gösterir.

import org.opencv.core.Core;
import org.opencv.core.CvType;
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 destination1 = new Mat(source.rows()*2, source.cols()*2,source.type());
         destination1 = source;
         
         Imgproc.pyrUp(source, destination1, new  Size(source.cols()*2   source.rows()*2));
         Highgui.imwrite("pyrUp.jpg", destination1);
         
         source = Highgui.imread("digital_image_processing.jpg", 
         Highgui.CV_LOAD_IMAGE_COLOR);
         
         Mat destination = new Mat(source.rows()/2,source.cols()/2, source.type());
         destination = source;
         Imgproc.pyrDown(source, destination, new Size(source.cols()/2,  source.rows()/2));
         Highgui.imwrite("pyrDown.jpg", destination);
         
      } catch (Exception e) { 
         System.out.println("error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Orijinal görüntüde, pyrUp (YUKARI Örnekleme) ve pyrDown (Aşağı Örnekleme) gerçekleştirilir. Örneklemeden sonraki çıktı aşağıda gösterildiği gibidir -

PyrUP Görüntüsü

pyrDown Görüntüsü

Eşikleme, görüntü bölümlemesinin en kolay şekilde elde edilmesini sağlar. Görüntü bölümleme, tüm görüntüyü, her bir kümedeki piksellerin bazı ortak özelliklere sahip olacak şekilde bir dizi piksele bölmek anlamına gelir. Görüntü bölütleme, nesneleri ve sınırlarını tanımlamada oldukça kullanışlıdır.

Bu bölümde, görüntüler üzerinde bazı temel eşikleme işlemleri gerçekleştiriyoruz.

Kullanırız OpenCV işlevi threshold. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

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

Parametreler aşağıda açıklanmıştır -

Sr.No. Parametre ve Açıklama
1

source

Kaynak görüntüdür.

2

destination

Hedef görüntüdür.

3

thresh

Eşik değerdir.

4

maxval

THRESH_BINARY ve THRESH_BINARY_INV eşik türleriyle kullanılacak maksimum değerdir.

5

type

Olası türler THRESH_BINARY, THRESH_BINARY_INV, THRESH_TRUNC ve THRESH_TOZERO'dur.

Bu eşikleme yöntemlerinin dışında, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir görüntüye eşikleme işlemleri gerçekleştirmek için Imgproc sınıfının kullanımını gösterir -

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());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Yukarıdaki orijinal görüntüde, aşağıdaki çıktıda gösterilen bazı eşikleme işlemleri gerçekleştirilir -

Thresh Binary

Thresh Binary Invert

Thresh Zero

Görüntünün şekli OpenCV kullanılarak kolayca değiştirilebilir. Görüntü dört yönden herhangi birinde çevrilebilir, ölçeklenebilir veya döndürülebilir.

Görüntünün şeklini değiştirmek için görüntüyü okur ve Mat nesneye dönüştürürüz. Söz dizimi aşağıda verilmiştir -

File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
//convert Buffered Image to Mat.

Bir Görüntüyü Çevirme

OpenCV, aşağıda açıklanan üç tür çevirme koduna izin verir -

Sr.No. Flip Kodu ve Açıklaması
1

0

0, x ekseni etrafında dönme anlamına gelir.

2

1

1, y ekseni etrafında dönme anlamına gelir.

3

-1

-1, her iki eksen etrafında dönme anlamına gelir.

Uygun çevirme kodunu yönteme aktarıyoruz flip() içinde Coresınıf. Söz dizimi aşağıda verilmiştir -

Core.flip(source mat, destination mat1, flip_code);

Yöntem flip() üç parametre alır - kaynak görüntü matrisi, hedef görüntü matrisi ve çevirme kodu.

Flip yönteminin yanı sıra, Core sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

add(Mat src1, Mat src2, Mat dst)

İki dizinin veya bir dizinin ve bir skalerin öğe başına toplamını hesaplar.

2

bitwise_and(Mat src1, Mat src2, Mat dst)

İki dizinin veya bir dizinin ve bir skalerin öğe başına bit bazlı birleşimini hesaplar.

3

bitwise_not(Mat src, Mat dst)

Bir dizinin her bitini tersine çevirir.

4

circle(Mat img, Point center, int radius, Scalar color)

Bir daire çizer.

5

sumElems(Mat src)

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

subtract(Mat src1, Scalar src2, Mat dst, Mat mask)

İki dizi veya dizi ile bir skaler arasındaki öğe başına farkı hesaplar.

Misal

Aşağıdaki örnek, bir görüntüyü çevirmek için Core sınıfının kullanımını gösterir -

import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;

import java.io.File;
import javax.imageio.ImageIO;

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

import org.opencv.imgproc.Imgproc;

public class Main {
   public static void main( String[] args ) {
   
      try {
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         File input = new File("digital_image_processing.jpg");
         BufferedImage image = ImageIO.read(input);	

         byte[] data = ((DataBufferByte) image.getRaster().  getDataBuffer()).getData();
         Mat mat = new Mat(image.getHeight(),image.getWidth(),CvType.CV_8UC3);
         mat.put(0, 0, data);

         Mat mat1 = new Mat(image.getHeight(),image.getWidth(),CvType.CV_8UC3);
         Core.flip(mat, mat1, -1);

         byte[] data1 = new byte[mat1.rows()*mat1.cols()*(int)(mat1.elemSize())];
         mat1.get(0, 0, data1);
         BufferedImage image1 = new BufferedImage(mat1.cols(), mat1.rows(), 5);
         image1.getRaster().setDataElements(0,0,mat1.cols(),mat1.rows(),data1);

         File ouptut = new File("hsv.jpg");
         ImageIO.write(image1, "jpg", ouptut);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Çıktı

Yukarıdaki örneği çalıştırdığınızda, bir görüntü adını çevirirdi digital_image_processing.jpg eşdeğer HSV renk alanı görüntüsüne göre ve sabit diske adıyla yazın flip.jpg.

Gerçek görüntü

Çevrilmiş Görüntü

Bu bölümde, bir görüntüyü bulanıklaştıran görüntüye Gauss filtresi uyguluyoruz. Görüntülere Gauss filtresi uygulamak için OpenCV işlevi GaussianBlur'u kullanacağız. Imgproc paketi altında bulunabilir. Söz dizimi aşağıda verilmiştir -

Imgproc.GaussianBlur(source, destination,Size,SigmaX);

İşlev bağımsız değişkenleri aşağıda açıklanmıştır -

Sr.No. Argüman ve Açıklama
1

source

Kaynak görüntüdür.

2

destination

Hedef görüntüdür.

3

Size

Gauss çekirdek boyutudur.

4

SigmaX

X yönünde Gauss kernel standart sapmasıdır.

GaussianBlur yönteminden ayrı olarak, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir görüntüye Gauss filtresini uygulamak için Imgproc sınıfının kullanımını gösterir.

import org.opencv.core.Core;
import org.opencv.core.CvType;
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(45,45), 0);
         Highgui.imwrite("Gaussian45.jpg", destination);
      
      } catch (Exception e) {
         System.out.println("Error:" + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Bu orijinal görüntü 11 ve 45 boyutundaki Gauss filtresiyle birleştirildiğinde, aşağıdaki çıktı görülür.

Boyut 11 Gauss filtresi

45 boyutunda Gauss filtresi

Bir görüntüyü bulanıklaştıran Box filtresi uyguluyoruz. Bir Kutu filtresi 3x3, 5x5, 9x9 vb. Boyutlarda olabilir.

Kullanırız OpenCV işlevi filter2DGörüntülere Kutu filtresi uygulamak için. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );

İşlev bağımsız değişkenleri aşağıda açıklanmıştır -

Sr.No. Argüman ve Açıklama
1

src

Kaynak görüntüdür.

2

dst

Hedef görüntüdür.

3

depth

Dst derinliğidir. Negatif bir değer (-1 gibi), derinliğin kaynakla aynı olduğunu gösterir.

4

kernel

Görüntü üzerinden taranacak çekirdektir.

5

anchor

Çapanın çekirdeğine göre konumudur. Konum Noktası (-1, -1) varsayılan olarak merkezi gösterir.

6

delta

Evrişim sırasında her piksele eklenecek bir değerdir. Varsayılan olarak 0'dır.

7

BORDER_DEFAULT

Bu değere varsayılan olarak izin veriyoruz.

Filter2D () yönteminin dışında, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir Grayscale görüntüsüne Box filtresi uygulamak için Imgproc sınıfının kullanımını gösterir.

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 convolution {
   public static void main( String[] args ) {
   
      try {
         int kernelSize = 9;
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         
         Mat source = Highgui.imread("grayscale.jpg",  Highgui.CV_LOAD_IMAGE_GRAYSCALE);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());
         Mat kernel = Mat.ones(kernelSize,kernelSize, CvType.CV_32F);	      
         
         for(int i=0; i<kernel.rows(); i++) {
            for(int j=0; j<kernel.cols(); j++) {
            
               double[] m = kernel.get(i, j);
               
               for(int k =0; k<m.length; k++) {
                  m[k] = m[k]/(kernelSize * kernelSize);
               }
               kernel.put(i,j, m);
            }
         }	   
         
         Imgproc.filter2D(source, destination, -1, kernel);
         Highgui.imwrite("output.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Bu örnekte, imajımızı aşağıdaki filtre (çekirdek) ile birleştiriyoruz. Bu filtre, boyutu büyüdükçe görüntünün bulanıklaşmasına neden olur.

Bu orijinal görüntü, aşağıda verilen 5 boyutundaki kutu filtresiyle birleştirilmiştir -

5 boyutlu kutu filtre

1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25
1/25 1/25 1/25 1/25 1/25

Dönüştürülmüş Görüntü (Boyut 5 Kutu Filtreli)

Dönüştürülmüş Görüntü (Boyut 9 Kutu Filtreli)

Bu bölümde iki çok yaygın morfoloji operatörünün uygulanmasını öğreniyoruz: Genişleme ve Erozyon.

Kullanırız OpenCV işlevi erode ve dilate. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

Imgproc.erode(source, destination, element);
Imgproc.dilate(source, destination, element);

Parametreler aşağıda açıklanmıştır -

Sr.No. Parametre ve Açıklama
1

source

Kaynak görüntüdür.

2

destination

Hedef görüntüdür.

3

element

Erozyon ve genleşme için kullanılan bir yapılandırma elemanıdır, eleman = Mat () ise 3 x 3 dikdörtgen yapı elemanı kullanılır.

Erode () ve dilate () yöntemlerinden ayrı olarak, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir görüntü üzerinde erozyon ve genişleme gerçekleştirmek için Imgproc sınıfının kullanımını göstermektedir -

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;

         int erosion_size = 5;
         int dilation_size = 5;
         
         Mat element = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new  Size(2*erosion_size + 1, 2*erosion_size+1));
         Imgproc.erode(source, destination, element);
         Highgui.imwrite("erosion.jpg", destination);

         source = Highgui.imread("digital_image_processing.jpg",  Highgui.CV_LOAD_IMAGE_COLOR);
         
         destination = source;
         
         Mat element1 = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new  Size(2*dilation_size + 1, 2*dilation_size+1));
         Imgproc.dilate(source, destination, element1);
         Highgui.imwrite("dilation.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("error:" + e.getMessage());
      } 
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Yukarıdaki orijinal görüntüde, aşağıdaki çıktıda gösterilen bazı erozyon ve genişletme işlemleri gerçekleştirilmiştir -

Erozyon

Genişleme

Bu bölümde, görüntülere filigran uygulamanın iki yolunu öğreniyoruz. Bu yollar -

  • Metin Filigranı Uygulama
  • Görüntü filigranı uygulama

Metin Filigranı Uygulama

Kullanırız OpenCV işlevi putTextgörüntüye metin filigranı uygulamak için. Altında bulunabilirCorepaketi. Söz dizimi aşağıda verilmiştir -

Core.putText(source, Text, Point, fontFace ,fontScale , color);

Bu işlevin parametreleri aşağıda açıklanmıştır -

Sr.No. Parametre ve Açıklama
1

Source

Kaynak görüntüdür.

2

Text

Resimde görünecek olan dize metnidir.

3

Point

Metnin görüntü üzerinde görünmesi gereken noktadır.

4

fontFace

Yazı tipi. Örneğin - FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX vb.

5

fontScale

Yazı tipine özgü temel boyutla çarpılan yazı tipi ölçek faktörüdür.

6

color

Metin rengidir.

PutText yönteminin yanı sıra, Core sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

normalize(Mat src, Mat dst, double alpha, double beta, int norm_type)

Bir dizinin norm veya değer aralığını normalleştirir.

2

perspectiveTransform(Mat src, Mat dst, Mat m)

Vektörlerin perspektif matris dönüşümünü gerçekleştirir.

3

phase(Mat x, Mat y, Mat angle)

2D vektörlerin dönme açısını hesaplar.

4

rectangle(Mat img, Point pt1, Point pt2, Scalar color)

Basit, kalın veya sağa dönük bir dikdörtgen çizer.

5

reduce(Mat src, Mat dst, int dim, int rtype, int dtype)

Bir matrisi bir vektöre indirger.

6

transform(Mat src, Mat dst, Mat m)

Her dizi elemanının matris dönüşümünü gerçekleştirir.

Misal

Aşağıdaki örnek, bir görüntüye metin filigranı uygulamak için Core sınıfının kullanımını gösterir -

import org.opencv.core.Core;
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());  
         
         Core.putText(source, "Tutorialspoint.com", new Point  (source.rows()/2,source.cols()/2), Core.FONT_ITALIC,new Double(1),new  Scalar(255));

         Highgui.imwrite("watermarked.jpg", source);
         
      } catch (Exception e) {
         System.out.println("Error: "+e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Metin Filigranlı Resim

Görüntüye Görüntü Filigranı Uygulama

Kullanacağız OpenCV işlevi addWeightedgörüntüye filigran uygulamak için. Altında bulunabilirCorepaketi. Söz dizimi aşağıda verilmiştir -

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

Bu işlevin parametreleri aşağıda açıklanmıştır -

Sr.No. Parametre ve Açıklama
1

src1

İlk girdi dizisidir.

2

alpha

İlk dizi elemanlarının ağırlığıdır.

3

src2

Src1 ile aynı boyut ve kanal numarasına sahip ikinci giriş dizisidir.

4

beta

İkinci dizi elemanlarının ağırlığıdır.

5

gamma

Her bir toplama eklenen skalerdir.

6

dst

Giriş dizileriyle aynı boyut ve sayıda kanala sahip çıktı dizisidir.

Misal

Aşağıdaki örnek, bir görüntüye görüntü filigranı uygulamak için Core sınıfının kullanımını gösterir -

import org.opencv.core.Core;
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 waterMark = Highgui.imread("watermark.png",  Highgui.CV_LOAD_IMAGE_COLOR);
         Rect ROI = new Rect(waterMark.rows() * 4,waterMark.cols(),  waterMark.cols(),waterMark.rows());
         
         Core.addWeighted(source.submat(ROI), 0.8, waterMark, 0.2, 1,  source.submat(ROI));
         Highgui.imwrite("watermarkedImage.jpg", source);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Filigran Resmi

Filigranlı Resim

Evrişim, f ve g olmak üzere iki fonksiyonun matematiksel işlemidir. Bu durumda f ve g işlevi görüntülerdir, çünkü bir görüntü aynı zamanda iki boyutlu bir işlevdir.

Evrişim Gerçekleştirme

Bir görüntü üzerinde evrişim gerçekleştirmek için aşağıdaki adımlar atılır -

  • Maskeyi (yatay ve dikey) yalnızca bir kez çevirin.
  • Maskeyi görüntünün üzerine kaydırın.
  • Karşılık gelen öğeleri çarpın ve ardından ekleyin.
  • Görüntünün tüm değerleri hesaplanana kadar bu prosedürü tekrarlayın.

Kullanırız OpenCV işlevi filter2Dgörüntülere evrişim uygulamak için. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );

İşlev bağımsız değişkenleri aşağıda açıklanmıştır -

Sr.No. Argüman ve Açıklama
1

src

Kaynak görüntüdür.

2

dst

Hedef görüntüdür.

3

depth

Dst derinliğidir. Negatif bir değer (-1 gibi), derinliğin kaynakla aynı olduğunu gösterir.

4

kernel

Görüntü üzerinden taranacak çekirdektir.

5

anchor

Çapanın çekirdeğine göre konumudur. Konum Noktası (-1, -1) varsayılan olarak merkezi gösterir.

6

delta

Evrişim sırasında her piksele eklenecek bir değerdir. Varsayılan olarak 0'dır.

7

BORDER_DEFAULT

Bu değere varsayılan olarak izin veriyoruz.

Misal

Aşağıdaki örnek, bir Grayscale görüntüsünde evrişim gerçekleştirmek için Imgproc sınıfının kullanımını gösterir.

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 convolution {
   public static void main( String[] args ) {
   
      try {
         int kernelSize = 3;
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         
         Mat source = Highgui.imread("grayscale.jpg",  Highgui.CV_LOAD_IMAGE_GRAYSCALE);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());
         
         Mat kernel = new Mat(kernelSize,kernelSize, CvType.CV_32F) {
            {
               put(0,0,0);
               put(0,1,0);
               put(0,2,0);

               put(1,0,0);
               put(1,1,1);
               put(1,2,0);

               put(2,0,0);
               put(2,1,0);
               put(2,2,0);
            }
         };
         
         Imgproc.filter2D(source, destination, -1, kernel);
         Highgui.imwrite("original.jpg", destination);
         
      } catch (Exception e) {
          System.out.println("Error:" + e.getMessage());
      }
   }
}

Çıktı

Bu örnekte, imajımızı aşağıdaki filtre (çekirdek) ile birleştiriyoruz. Bu filtre, orijinal görüntünün olduğu gibi üretilmesiyle sonuçlanır -

0 0 0
0 1 0
0 0 0

Gerçek görüntü

Katıştırılmış Görüntü

Prewitt operatörü, bir görüntüde kenar algılama için kullanılır. İki tür kenarı algılar: dikey kenarlar ve yatay kenarlar.

Kullanırız OpenCV işlevi filter2DPrewitt operatörünü görüntülere uygulamak için. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );

İşlev bağımsız değişkenleri aşağıda açıklanmıştır -

Sr.No. Argüman ve Açıklama
1

src

Kaynak görüntüdür.

2

dst

Hedef görüntüdür.

3

depth

Dst derinliğidir. Negatif bir değer (-1 gibi), derinliğin kaynakla aynı olduğunu gösterir.

4

kernel

Görüntü üzerinden taranacak çekirdektir.

5

anchor

Çapanın çekirdeğine göre konumudur. Konum Noktası (-1, -1) varsayılan olarak merkezi gösterir.

6

delta

Evrişim sırasında her piksele eklenecek bir değerdir. Varsayılan olarak 0'dır.

7

BORDER_DEFAULT

Bu değere varsayılan olarak izin veriyoruz.

Filter2D yönteminin yanı sıra, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, Prewitt operatörünü bir Grayscale görüntüsüne uygulamak için Imgproc sınıfının kullanımını gösterir.

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 convolution {
   public static void main( String[] args ) {
      try {
         int kernelSize = 9;
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         
         Mat source = Highgui.imread("grayscale.jpg", Highgui.CV_LOAD_IMAGE_GRAYSCALE);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());
         
         Mat kernel = new Mat(kernelSize,kernelSize, CvType.CV_32F) {
            {
               put(0,0,-1);
               put(0,1,0);
               put(0,2,1);

               put(1,0-1);
               put(1,1,0);
               put(1,2,1);

               put(2,0,-1);
               put(2,1,0);
               put(2,2,1);
            }
         };	 
         
         Imgproc.filter2D(source, destination, -1, kernel);
         Highgui.imwrite("output.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Bu orijinal görüntü, Prewitt operatörü ile dikey kenarları aşağıda verildiği gibi birleştirilir -

Dikey yön

-1 0 1
-1 0 1
-1 0 1

Dönüşümlü Görüntü (Dikey Yön)

Bu orijinal görüntü, aşağıda verilen Prewitt yatay kenar operatörüyle de birleştirildi -

Yatay Yön

-1 -1 -1
0 0 0
1 1 1

Dönüştürülmüş Görüntü (Yatay Yön)

Sobel operatörü Prewitt operatörüne çok benzer. Aynı zamanda türev bir maskedir ve kenar algılama için kullanılır. Sobel operatörü, bir görüntüdeki iki tür kenarı algılamak için kullanılır: Dikey yön kenarları ve Yatay yön kenarları.

Kullanacağız OpenCV işlevi filter2DSobel operatörünü görüntülere uygulamak. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );

İşlev bağımsız değişkenleri aşağıda açıklanmıştır -

Sr.No. Argüman
1

src

Kaynak görüntüdür.

2

dst

Hedef görüntüdür.

3

depth

Dst derinliğidir. Negatif bir değer (-1 gibi), derinliğin kaynakla aynı olduğunu gösterir.

4

kernel

Görüntü üzerinden taranacak çekirdektir.

5

anchor

Çapanın çekirdeğine göre konumudur. Konum Noktası (-1, -1) varsayılan olarak merkezi gösterir.

6

delta

Evrişim sırasında her piksele eklenecek bir değerdir. Varsayılan olarak 0'dır.

7

BORDER_DEFAULT

Bu değere varsayılan olarak izin veriyoruz.

Filter2D yönteminin yanı sıra, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, Sobel operatörünü Grayscale görüntüsüne uygulamak için Imgproc sınıfının kullanımını gösterir.

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 convolution {
   public static void main( String[] args ) {
   
      try {
         int kernelSize = 9;
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         
         Mat source = Highgui.imread("grayscale.jpg",  Highgui.CV_LOAD_IMAGE_GRAYSCALE);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());
         
         Mat kernel = new Mat(kernelSize,kernelSize, CvType.CV_32F) {
            {
               put(0,0,-1);
               put(0,1,0);
               put(0,2,1);

               put(1,0-2);
               put(1,1,0);
               put(1,2,2);

               put(2,0,-1);
               put(2,1,0);
               put(2,2,1);
            }
         };	      
         
         Imgproc.filter2D(source, destination, -1, kernel);
         Highgui.imwrite("output.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Bu orijinal görüntü, aşağıda verilen Sobel dikey kenar operatörü ile birleştirilmiştir -

Dikey yön

-1 0 1
-2 0 2
-1 0 1

Dönüşümlü Görüntü (Dikey Yön)

Bu orijinal, aşağıda verilen Sobel operatörü yatay kenarlarla birleştirilmiştir -

Yatay Yön

-1 -2 -1
0 0 0
1 2 1

Dönüştürülmüş Görüntü (Yatay Yön)

Kirsch pusula maskeleri, kenar algılama için kullanılan bir başka türev maske türüdür. Bu operatör aynı zamanda yön maskesi olarak da bilinir. Bu operatörde bir maskeyi alıp sekiz yönün kenarlarını elde etmek için sekiz pusula yönünün hepsinde döndürüyoruz.

Kullanacağız OpenCV işlevi filter2DKirsch operatörünü görüntülere uygulamak için. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );

İşlev bağımsız değişkenleri aşağıda açıklanmıştır -

Sr.No. Argüman
1

src

Kaynak görüntüdür.

2

dst

Hedef görüntüdür.

3

depth

Dst derinliğidir. Negatif bir değer (-1 gibi), derinliğin kaynakla aynı olduğunu gösterir.

4

kernel

Görüntü üzerinden taranacak çekirdektir.

5

anchor

Çapanın çekirdeğine göre konumudur. Konum Noktası (-1, -1) varsayılan olarak merkezi gösterir.

6

delta

Evrişim sırasında her piksele eklenecek bir değerdir. Varsayılan olarak 0'dır.

7

BORDER_DEFAULT

Bu değere varsayılan olarak izin veriyoruz.

Filter2D () yönteminin dışında, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, Kirsch operatörünü Grayscale görüntüsüne uygulamak için Imgproc sınıfının kullanımını gösterir.

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 convolution {
   public static void main( String[] args ) {
   
      try {
         int kernelSize = 9;
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         
         Mat source = Highgui.imread("grayscale.jpg",  Highgui.CV_LOAD_IMAGE_GRAYSCALE);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());
         
         Mat kernel = new Mat(kernelSize,kernelSize, CvType.CV_32F) {
            {
               put(0,0,-3);
               put(0,1,-3);
               put(0,2,-3);
      
               put(1,0-3);
               put(1,1,0);
               put(1,2,-3);

               put(2,0,5);
               put(2,1,5);
               put(2,2,5);
            }
         };	      
         
         Imgproc.filter2D(source, destination, -1, kernel);
         Highgui.imwrite("output.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Bu orijinal görüntü, aşağıda verildiği gibi Doğu kenarlarının Kirsch operatörü ile birleştirilmiştir -

Kirsch Doğu

-3 -3 -3
-3 0 -3
5 5 5

Katıştırılmış Görüntü (Kirsch East)

Bu orijinal görüntü, aşağıda verildiği gibi Güney Batı kenarlarının Kirsch operatörü ile birleştirilmiştir -

Kirsch Güney Batı

5 5 -3
5 0 -3
-3 -3 -3

Katlanmış Görüntü (Kirsch Güney Batı)

Robinson pusula maskeleri, kenar algılama için kullanılan bir başka türev maskelerdir. Bu operatör aynı zamanda yön maskesi olarak da bilinir. Bu operatörde bir maskeyi alıp sekiz yönün kenarlarını elde etmek için sekiz ana yönün hepsinde döndürüyoruz.

Kullanacağız OpenCV işlevi filter2DRobinson operatörünü görüntülere uygulamak için. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );

İşlev bağımsız değişkenleri aşağıda açıklanmıştır -

Sr.No. Argüman ve Açıklama
1

src

Kaynak görüntüdür.

2

dst

Hedef görüntüdür.

3

depth

Dst derinliğidir. Negatif bir değer (-1 gibi), derinliğin kaynakla aynı olduğunu gösterir.

4

kernel

Görüntü üzerinden taranacak çekirdektir.

5

anchor

Çapanın çekirdeğine göre konumudur. Konum Noktası (-1, -1) varsayılan olarak merkezi gösterir.

6

delta

Evrişim sırasında her piksele eklenecek bir değerdir. Varsayılan olarak 0'dır.

7

BORDER_DEFAULT

Bu değere varsayılan olarak izin veriyoruz.

Filter2D yönteminin yanı sıra Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, Robinson operatörünü Grayscale görüntüsüne uygulamak için Imgproc sınıfının kullanımını gösterir.

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 convolution {
   public static void main( String[] args ) {
   
      try {
         int kernelSize = 9;
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         
         Mat source = Highgui.imread("grayscale.jpg",  Highgui.CV_LOAD_IMAGE_GRAYSCALE);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());
         
         Mat kernel = new Mat(kernelSize,kernelSize, CvType.CV_32F) {
            {
               put(0,0,-1);
               put(0,1,0);
               put(0,2,1);

               put(1,0-2);
               put(1,1,0);
               put(1,2,2);

               put(2,0,-1);
               put(2,1,0);
               put(2,2,1);
            }
         };	      
         
         Imgproc.filter2D(source, destination, -1, kernel);
         Highgui.imwrite("output.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Bu orijinal görüntü, aşağıda verildiği gibi Kuzey kenarlarının Robinson operatörü ile birleştirilmiştir -

Kuzey Yönü Maskesi

-1 0 1
-2 0 2
-1 0 1

Katıştırılmış Görüntü (Robinson North)

Bu orijinal görüntü, aşağıda verildiği gibi, Doğu kenarlarının Robinson operatörü ile de birleştirilmiştir -

Doğu Yönü Maskesi

-1 -2 -1
0 0 0
1 2 1

Katıştırılmış Görüntü (Robinson East)

Laplacian Operatörü ayrıca bir görüntüdeki kenarları bulmak için kullanılan bir türev operatördür. Laplacian ile Prewitt, Sobel, Robinson ve Kirsch gibi diğer operatörler arasındaki en büyük fark, bunların hepsinin birinci dereceden türev maskeler olması, ancak Laplacian'ın ikinci dereceden bir türev maskesidir.

Kullanırız OpenCV işlevi filter2DLaplacian operatörünü görüntülere uygulamak için. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );

İşlev bağımsız değişkenleri aşağıda açıklanmıştır -

Sr.No. Argümanlar
1

src

Kaynak görüntüdür.

2

dst

Hedef görüntüdür.

3

depth

Dst derinliğidir. Negatif bir değer (-1 gibi), derinliğin kaynakla aynı olduğunu gösterir.

4

kernel

Görüntü üzerinden taranacak çekirdektir.

5

anchor

Çapanın çekirdeğine göre konumudur. Konum Noktası (-1, -1) varsayılan olarak merkezi gösterir.

6

delta

Evrişim sırasında her piksele eklenecek bir değerdir. Varsayılan olarak 0'dır.

7

BORDER_DEFAULT

Bu değere varsayılan olarak izin veriyoruz.

Filter2D () yönteminin dışında, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir Grayscale görüntüsüne Laplacian operatörünü uygulamak için Imgproc sınıfının kullanımını gösterir.

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 convolution {
   public static void main( String[] args ) {
   
      try {
         int kernelSize = 9;
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         
         Mat source = Highgui.imread("grayscale.jpg",  Highgui.CV_LOAD_IMAGE_GRAYSCALE);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());

         Mat kernel = new Mat(kernelSize,kernelSize, CvType.CV_32F) {
            {
               put(0,0,0);
               put(0,1,-1)
               put(0,2,0);

               put(1,0-1);
               put(1,1,4);
               put(1,2,-1);

               put(2,0,0);
               put(2,1,-1);
               put(2,2,0);
            }
         };	      
         
         Imgproc.filter2D(source, destination, -1, kernel);
         Highgui.imwrite("output.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Bu orijinal görüntü, aşağıda verildiği gibi Laplacian Negative operatörü ile birleştirilir -

Laplacian Negatifi

0 -1 0
-1 4 -1
0 -1 0

Döndürülmüş Görüntü (Laplacian Negatif)

Bu orijinal görüntü, aşağıda verildiği gibi Laplacian Positive operatörü ile birleştirilmiştir -

Laplacian Pozitif

0 1 0
1 -4 1
0 1 0

Katıştırılmış Görüntü (Laplacian Pozitif)

Ağırlıklı ortalama filtrede, merkezin katkısının diğer değerlerden daha fazla olması nedeniyle merkez değere daha fazla ağırlık verdik. Ağırlıklı ortalama filtreleme sayesinde, görüntünün bulanıklığını kontrol edebiliriz.

Kullanırız OpenCV işlevi filter2Dgörüntülere ağırlıklı ortalama filtre uygulamak için. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );

İşlev bağımsız değişkenleri aşağıda açıklanmıştır -

Sr.No. Argüman ve Açıklama
1

src

Kaynak görüntüdür.

2

dst

Hedef görüntüdür.

3

ddepth

Dst derinliğidir. Negatif bir değer (-1 gibi), derinliğin kaynakla aynı olduğunu gösterir.

4

kernel

Görüntü üzerinden taranacak çekirdektir.

5

anchor

Çapanın çekirdeğine göre konumudur. Konum Noktası (-1, -1) varsayılan olarak merkezi gösterir.

6

delta

Evrişim sırasında her piksele eklenecek bir değerdir. Varsayılan olarak 0'dır.

7

BORDER_DEFAULT

Bu değere varsayılan olarak izin veriyoruz.

Filter2D () yönteminin dışında, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir Graycale görüntüsüne ağırlıklı ortalama filtre uygulamak için Imgproc sınıfının kullanımını gösterir.

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 convolution {
   public static void main( String[] args ) {
   
      try {
         int kernelSize = 9;
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         
         Mat source = Highgui.imread("grayscale.jpg",  Highgui.CV_LOAD_IMAGE_GRAYSCALE);
         Mat destination = new Mat(source.rows(),source.cols(),source.type());
         
         Mat kernel = Mat.ones(kernelSize,kernelSize, CvType.CV_32F) {	      
         
         for(int i=0; i<kernel.rows(); i++) {
            for(int j=0; j<kernel.cols(); j++) {

               double[] m = kernel.get(i, j);

               for(int k =0; k<m.length; k++) {

                  if(i==1 && j==1) {
                     m[k] = 10/18;
                  }
                  else{
                     m[k] = m[k]/(18);
                  }
               }
               kernel.put(i,j, m);

               }
            }	
         };	      
         
         Imgproc.filter2D(source, destination, -1, kernel);
         Highgui.imwrite("output.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Bu orijinal görüntü, aşağıda verilen ağırlıklı ortalama filtre ile birleştirilir -

Ağırlıklı Ortalama Filtre

1 1 1
1 10 1
1 1 1

Katıştırılmış Görüntü

Yakınlaştırma, görüntüdeki ayrıntıların daha görünür ve belirgin hale gelmesi için bir görüntüyü büyütme işlemidir.

Kullanırız OpenCV işlevi resizegörüntülere yakınlaştırma uygulamak için. Altında bulunabilirImgprocpaketi. Söz dizimi aşağıda verilmiştir -

Imgproc.resize(source,destination, destination.size(),zoomFactor,zoomFactor,Interpolation);

Yeniden boyutlandırma işlevinde, kaynak görüntü, hedef görüntü ve boyutunu, yakınlaştırma faktörünü ve kullanılacak enterpolasyon yöntemini iletiriz.

Mevcut enterpolasyon yöntemleri aşağıda açıklanmıştır -

Sr.No. Enterpolasyon yöntemi ve açıklaması
1

INTER_NEAREST

En yakın komşu enterpolasyonudur.

2

INTER_LINEAR

Çift doğrusal enterpolasyondur (varsayılan olarak kullanılır).

3

INTER_AREA

Piksel alanı ilişkisini kullanarak yeniden örnekleme yapıyor. Daha özgür sonuçlar verdiği için görüntü yok etme için tercih edilen bir yöntem olabilir.

4

INTER_CUBIC

4x4 piksel mahallesi üzerinde iki kübik bir enterpolasyondur.

5

INTER_LANCZOS4

Bu, 8x8 piksel mahallesi üzerinde bir Lanczos enterpolasyonudur.

Yeniden boyutlandırma yönteminin yanı sıra, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir görüntüye yakınlaştırma uygulamak için Imgproc sınıfının kullanımını gösterir.

import org.opencv.core.Core;
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 {
         int zoomingFactor = 2;
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         
         Mat source = Highgui.imread("image.jpg", Highgui.CV_LOAD_IMAGE_GRAYSCALE);
         Mat destination = new Mat(source.rows() * zoomingFactor, source.cols()*  zoomingFactor,source.type());  
         
         Imgproc.resize(source, destination, destination.size(),  zoomingFactor,zoomingFactor,Imgproc.INTER_NEAREST);
         Highgui.imwrite("zoomed.jpg", destination);
         
      } catch (Exception e) {
         System.out.println("Error: "+e.getMessage());
      }
   }
}

Çıktı

Verilen kodu çalıştırdığınızda, aşağıdaki çıktı görülür -

Gerçek görüntü

Yakınlaştırılmış Görüntü (Yakınlaştırma faktörü - 2)

Bu bölümde, yaygın olarak kullanılan ve projeye kolayca entegre edilebilen ücretsiz görüntü işleme kitaplıklarından bazılarını keşfedeceğiz. Bu kütüphaneler şunları içerir -

  • ImageJ
  • Fiji
  • Commons Görüntüleme
  • ImageMagick
  • Endrov
  • LeadTools
  • OpenCv

ImageJ

ImageJ, Macintosh için NIH Image'dan esinlenen, kamuya açık bir Java görüntü işleme programıdır. 8 bit, 16 bit ve 32 bit görüntüleri görüntüleyebilir, düzenleyebilir, analiz edebilir, işleyebilir, kaydedebilir ve yazdırabilir.

ImageJ'nin temel özelliklerinden bazıları aşağıda açıklanmıştır -

Sr.No. Özellik Açıklama
1

Runs Everywhere

ImageJ, hem 32-bit hem de 64-bit modlarında Linux, Mac OS X ve Windows üzerinde çalışmasına izin veren Java ile yazılmıştır.

2

Open Source

ImageJ ve onun Java kaynak kodu ücretsiz olarak ve kamu malıdır.

3

Toolkit

Applet, sunucu uygulaması veya uygulama geliştirmek için ImageJ'yi bir görüntü işleme araç seti (sınıf kitaplığı) olarak kullanın.

4

Data Types

8-bit gri tonlama veya indekslenmiş renk, 16-bit işaretsiz tam sayı, 32-bit kayan nokta ve RGB rengi.

5

File Formats

GIF, JPEG, BMP, PNG, PGM, FITS ve ASCII'yi açın ve kaydedin. DICOM'u açın. Bir URL kullanarak TIFF'leri, GIF'leri, JPEG'leri, DICOM'ları ve ham verileri açın.

6

Selections

Dikdörtgen, eliptik veya düzensiz alan seçimleri oluşturun. Çizgi ve nokta seçimleri oluşturun.

7

Image Enhancement

Hem 8 bit gri tonlamalı hem de RGB renkli görüntülerde yumuşatma, keskinleştirme, kenar algılama, medyan filtreleme ve eşiklemeyi destekler.

8

Color Processing

32 bit renkli bir görüntüyü RGB veya HSV bileşenlerine bölün. 8 bit bileşenleri renkli bir görüntüde birleştirin.

Fiji

Fiji, bir görüntü işleme paketidir. ImageJ'nin (ve ImageJ2'nin) Java, Java3D ve uyumlu bir menü yapısında düzenlenmiş birçok eklenti ile birlikte dağıtımı olarak tanımlanabilir. Ubuntu, Linux ile karşılaştırıldığında Fiji, ImageJ ile karşılaştırır.

ImageJ temel özelliklerinin yanı sıra, Fiji'nin bazı gelişmiş özellikleri aşağıda açıklanmıştır -

Sr.No. Özellik Açıklama
1

Registering 3D images

Bu, Elastik Hizalama ve Montaj, Özellik Çıkarma, Görüntü Sabitleyici vb. İçerir.

2

Segmenting images

35'ten fazla segmentasyon türü sunar.

3

Useful keyboard short cuts

Fuji'nin birçok klavye kısayolu var.

4

Scripting

JavaScript, JRuby, Jython, Clojure ve Beanshell'de Makrolarla komut dosyası oluşturmaya izin verin.

5

Developing Plug-ins

Eklenti geliştirmeye başlamak için Komut Dosyası Düzenleyicisini kullanın ve ardından eklentileri çalıştırın.

6

ImageJ Tricks

ImageJ'nin kullanımı kolaydır, ancak bazen gerçekten uygulanan bazı işlevleri dilersiniz, ancak nasıl tetikleyeceğinizi bilemezsiniz.

Commons Görüntüleme

Daha önce Apache Commons Sanselan olarak bilinen Apache Commons Imaging, (boyut, renk, boşluk, ICC profili vb.) Ve meta veriler gibi görüntü bilgilerinin hızlı ayrıştırılması dahil olmak üzere çeşitli görüntü biçimlerini okuyan ve yazan bir kitaplıktır.

ImageJ'nin temel özelliklerinden bazıları aşağıda açıklanmıştır -

Sr.No. Özellik Açıklama
1

Java

Apache Commons Imaging,% 100 saf Java ile yazılmıştır. Herhangi bir JVM'de ve herhangi bir platformda değişiklik yapmadan çalışır.

2

Image Formats

Çok çeşitli görüntü formatlarını okur ve yazar ve diğer kitaplıkların tümü veya çoğu tarafından kaçırılan bazı varyasyonları ve kodlamaları destekler.

3

Metadata support

EXIF meta verileri dahil olmak üzere çeşitli meta verilerin yapılandırılmış bir şekilde okunmasını ve yazılmasını destekler.

4

Network Friendly

Ağ dostudur. Commons Imaging yalnızca ihtiyaç duyduğu verileri okur ve okunanı ağda çok ağır olmaması için önbelleğe alır.

5

Easy to use

Kullanımı çok kolay olacak şekilde tasarlanmıştır. Basit, temiz bir arayüze sahiptir. Çoğu işlem, tek bir Görüntüleme yöntemi çağrılarıdır.

6

Transparent

Commons Imaging şeffaf olmayı hedefler. Yok edilecek gizli tampon yok, boşaltılacak yerel bellek yok, arka plan iş parçacığı yok.

7

Open Source

Özgür Yazılım / Açık Kaynaktır. Apache Yazılım Lisansı altında mevcuttur.

8

Color Conversions

ColorConversions sınıfı, şu renk uzayları arasında dönüştürme yöntemleri sunar - CIE-L * CH, CIE-L * ab, CIE-L * uv, CMY, CMYK, HSL, HSV, Hunter-Lab, RGB, XYZ ve YXY.

ImageMagick

ImageMagick, bitmap görüntüleri oluşturmak, düzenlemek, oluşturmak veya dönüştürmek için bir yazılım paketidir. DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PNG, Postscript, SVG ve TIFF dahil olmak üzere 100'den fazla formattaki görüntüleri okuyabilir ve yazabilir. Görüntüleri yeniden boyutlandırmak, çevirmek, aynalamak, döndürmek, deforme etmek, yamultmak ve dönüştürmek, görüntü renklerini ayarlamak, çeşitli özel efektler uygulamak veya metin, çizgi, çokgen, elips ve Bezier eğrisi çizmek için ImageMagick'i kullanın.

ImageMagick'in temel özelliklerinden bazıları aşağıda açıklanmıştır -

Sr.No. Özellik Açıklama
1

Format conversion

Bir görüntüyü bir formattan diğerine dönüştürür (örn. PNG'den JPEG'e).

2

Transform

Görüntüyü yeniden boyutlandırabilir, döndürebilir, kırpabilir, çevirebilir veya kırpabilir.

3

Transparency

Görüntünün bazı kısımlarını görünmez kılar.

4

Draw

Bir resme şekil veya metin ekler.

5

Decorate

Bir resme bir sınır veya çerçeve ekler.

6

Special effects

Bir görüntüyü Bulanıklaştırabilir, keskinleştirebilir, eşik yapabilir veya tonlayabilir.

7

Animation

Bir grup görüntüden bir GIF animasyon dizisi oluşturabilir.

8

Composite

Bir görüntüyü diğerinin üzerine bindirebilir.

9

Morphology of shapes

Özellikleri çıkarır, şekilleri tanımlar ve görüntülerdeki desenleri tanır.

10

Encipher or decipher an image

Sıradan görüntüleri anlaşılmaz anlamsız sözlere ve tekrar geri dönüştürür.

Endrov

Endrov, çok amaçlı bir görüntü analiz programıdır. Bağımsız olarak yazılmıştır ve diğer özgür yazılımların ve pek çok ticari paketin birçok eksikliğini gidermek için tasarlanmıştır.

Endrov'un bazı temel özellikleri aşağıda açıklanmıştır -

Sr.No. Özellik Açıklama
1

View data

Verileri 2D ve 3D olarak görüntüler. Her kanalın kendi X, Y ve Z çözünürlüğüne sahip olabileceği karmaşık 4D veri şemalarını ve sınırsız sayıda kanalı işlemek için tasarlanmıştır.

2

Annotate your images

Resimlerinizi anlamak ve istatistik almak için otomatik olarak veya elle açıklama ekler.

3

Undo and Redo

Tüm işlemler için geri alabilir ve yineleyebilir.

4

Lazy Evaluation

Yerden büyük görüntü setlerini işlemek için tasarlanmıştır. Endrov, çoğunlukla araştırma programlama dillerinde bulunan bir kavram olan tembel değerlendirme kullanır.

5

Scripting language

Geleneksel komut dosyası yazmanın yanı sıra grafiksel komut dosyası dilini de destekler.

6

Java

Java ile yazılmıştır. Eklenti mimarisi, yeni Java eklentileriyle kolay genişletme sağlar. Matlab ile etkileşime girebilir.

7

Formats

Bio formatları kullanarak neredeyse tüm ticari ve açık dosya formatlarına erişir.

8

Microscopic Processing

Tüm mikroskoplarınızı tek bir programla kontrol edebilir ve anında görüntü analizi yapabilir.

LEADTOOLS

LEADTOOLS, belge temizleme, tıbbi görüntü geliştirme, renk dönüştürme ve düzeltme, gürültü azaltma, kenar algılama ve daha fazlası dahil olmak üzere çeşitli kategorilerde 200'den fazla görüntü işleme işlevi sağlar.

LEADTOOLS'un temel özelliklerinden bazıları aşağıda açıklanmıştır -

Sr.No. Özellik Açıklama
1

Scanned Document Image Processing

Bu güçlü işlev koleksiyonu, delinmiş delikler, eğri açılar, kenarlıklar, toz benekleri ve daha fazlası gibi taranmış eserler ve kusurların belgelerini okuyabilir.

2

Medical Image Processing

Daha iyi görseller için arka planı kaydırarak, seçerek, çıkararak ve kaldırarak görüntüyü geliştirin veya ayrıntıları vurgulayın.

3

Geometric Transformation

Bu işlevler, görüntüleri temizlemek, hizalamak, düzeltmek veya sanatsal 3D efektler uygulamak için kullanılabilir.

4

Brightness and Contrast

Bu işlevler, görüntüleri geliştirmek, sanatsal efektler uygulamak veya tıbbi görüntülerin tanısal değerlendirmesine yardımcı olmak için kullanılabilir.

5

Color Space Conversion

IIS ve Windows WF barındırılan uygulamalar dahil olmak üzere tek ve çok iş parçacıklı uygulamalara görüntü renk alanı işlevselliği ekleyebilirler.

6

Color Correction

Bu işlevler, değiştirilen renk kanallarıyla görüntüleri düzeltmek, renk yoğunluklarını dengelemek veya çeşitli görüntü analizi görevlerini gerçekleştirmek için kullanılır.

7

Image Enhancement

Bu işlevler, fotoğrafta kırmızı göz ve dengesiz renkler gibi yaygın hataları düzeltmenin yanı sıra tıbbi görüntülerin tanısal değerlendirmesine yardımcı olmak için kullanılır.

8

Region of Interest

Bu işlevler, bir görüntünün belirli bölümlerinde görüntü işleme işlevlerini gerçekleştirmek, barkodda zamandan tasarruf etmek ve OCR tanıma veya çeşitli görüntü analizi görevlerini gerçekleştirmek için görüntülerde ilgi alanları oluşturmak ve değiştirmek için kullanılır.

OpenCV

OpenCV, bir BSD lisansı altında yayınlanır ve dolayısıyla hem akademik hem de ticari kullanım için ücretsizdir. C ++, C, Python ve Java arayüzlerine sahiptir ve Windows, Linux, Mac OS, iOS ve Android'i destekler. OpenCV, hesaplama verimliliği için ve gerçek zamanlı uygulamalara güçlü bir odaklanma ile tasarlanmıştır. Optimize edilmiş C / C ++ ile yazılmış kitaplık, çok çekirdekli işlemeden yararlanabilir.

OpenCV'nin bazı temel özellikleri kısaca açıklanmıştır -

Sr.No. Özellik Açıklama
1

Smoothing Images

Bu, Blur, GaussianBlur, medianBlur ve iki taraflı Filtre uygulanmasını içerir.

2

Eroding and Dilating

İki çok yaygın morfoloji operatörünü uygulayabilir - Genişleme ve Erozyon.

3

Morphology Transformations

Açma, kapatma, TopHat ve BlackHat gibi Morfolojik Dönüşümleri uygulamak için OpenCV işlevi morfolojisiEx.

4

Image Pyramids

OpenCV, belirli bir görüntüyü örneklemek veya yukarı örneklemek için pyrUp ve pyrDown işlevlerini kullanır.

4

Basic Thresholding Operations

OpenCV işlev eşiğini kullanarak temel eşikleme işlemlerini gerçekleştirin.

5

Adding borders to your images

OpenCV işlevi copyMakeBorder, sınırları ayarlamak için kullanılır (görüntünüze ekstra dolgu).

7

Remapping

OpenCV'de remap işlevi basit bir yeniden eşleme uygulaması sunar.

8

Histogram Calculation

Basit amaçlar için OpenCV, bir dizi dizinin (genellikle görüntüler veya görüntü düzlemleri) histogramını hesaplayan calcHist işlevini uygular. 32 boyuta kadar çalışabilir.

OpenCV, bir BSD lisansı altında yayınlanır ve dolayısıyla hem akademik hem de ticari kullanım için ücretsizdir. C ++, C, Python ve Java arayüzlerine sahiptir ve Windows, Linux, Mac OS, iOS ve Android'i destekler.

OpenCV, hesaplama verimliliği için ve gerçek zamanlı uygulamalara güçlü bir odaklanma ile tasarlanmıştır. Optimize edilmiş C / C ++ ile yazılmış kitaplık, çok çekirdekli işlemeden yararlanabilir.

OpenCV'nin temel özelliklerinden bazıları aşağıda açıklanmıştır -

Sr.No. Özellik Açıklama
1

Smoothing Images

Bu, Blur, GaussianBlur, medianBlur ve iki taraflı Filtre uygulanmasını içerir.

2

Eroding and Dilating

İki çok yaygın morfoloji operatörünü uygulayabilir - Genişleme ve Erozyon.

3

Morphology Transformations

Açma, kapatma, TopHat ve BlackHat gibi Morfolojik Dönüşümleri uygulamak için OpenCV işlevi morfolojisiEx.

4

Image Pyramids

OpenCV, belirli bir görüntüyü örneklemek veya yukarı örneklemek için pyrUp ve pyrDown işlevlerini kullanır.

4

Basic Thresholding Operations

OpenCV fonksiyon eşiğini kullanarak temel eşikleme işlemlerini gerçekleştirebilir.

5

Adding borders to your images

OpenCV işlevi copyMakeBorder, sınırları ayarlamak için kullanılır (görüntünüze ekstra dolgu).

7

Remapping

OpenCV'de remap işlevi basit bir yeniden eşleme uygulaması sunar.

8

Histogram Calculation

Basit amaçlar için OpenCV, bir dizi dizinin (genellikle görüntüler veya görüntü düzlemleri) histogramını hesaplayan calcHist işlevini uygular. 32 boyuta kadar çalışabilir.

OpenCV entegrasyonu

Aşağıdaki adımlar OpenCV'yi uygulamalarınıza nasıl entegre edeceğinizi açıklamaktadır.

OpenCV'yi indirin

Onların resmi web sitesinden OpenCV indirebilirsiniz burada .

Kullanıcı Kitaplığı Oluşturun

Ayrıca, gelecekteki bir proje olarak kullanabilmemiz için bir OpenCV kullanıcı kitaplığı oluşturuyoruz.

Eclipse'i başlatın

Menüden Pencere -> Tercihler'i seçin.

Java -> Yol Oluştur -> Kullanıcı Kitaplıkları altında gidin ve Yeni'yi tıklayın.

Şimdi kitaplığınızın adını girin. Örneğin, OpenCV-2.4.6.

Bundan sonra, yeni kullanıcı kitaplığınızı seçin (yani OpenCV-2.4.6) ve Harici JAR Ekle üzerine tıklayın.

C: \ OpenCV-2.4.6 \ build \ java \ 'ya göz atın ve opencv-246.jar'ı seçin. Kavanozu ekledikten sonra, opencv-246.jar'ı genişletin ve Yerel kitaplık konumu'nu seçin ve Düzenle'ye basın.

Harici Klasör'ü seçin ... ve C: \ OpenCV-2.4.6 \ build \ java \ x64 klasörünü seçin. 32 bit sisteminiz varsa, x64 yerine x86 klasörünü seçmeniz gerekir.

Tamam'a basın ve bitirdiniz.

Artık kullanıcı kitaplığınız oluşturulmuştur. Artık bu yapılandırmayı herhangi bir projede yeniden kullanabilirsiniz.

OpenCV Projesi Oluşturun

Eclipse'de yeni bir java projesi oluşturun.

Java Ayarları adımında, Kitaplıklar sekmesinin altında Kitaplık Ekle ... öğesini seçin ve OpenCV-2.4.6 öğesini seçin, ardından Bitir öğesine tıklayın.

Bitir'i tıklayın ve bitirdiniz.

Renkli bir görüntüyü OpenCV kullanarak Gri Tonlamalı görüntüye dönüştürmek için, görüntüyü BufferedImage ve onu dönüştür MatNesne. Söz dizimi aşağıda verilmiştir -

File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
//convert Buffered Image to Mat.

Ardından, yöntemi kullanarak görüntüyü RGB'den Gri Tonlama formatına dönüştürebilirsiniz. cvtColor() içinde Imgprocsınıf. Söz dizimi aşağıda verilmiştir -

Imgproc.cvtColor(source mat, destination mat1, Imgproc.COLOR_RGB2GRAY);

Yöntem cvtColor() kaynak görüntü matrisi, hedef görüntü matrisi ve renk dönüştürme türü olan üç parametre alır.

CvtColor yönteminin yanı sıra, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Aşağıda listelenmiştir -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir görüntüyü Gri Tonlamaya dönüştürmek için Imgproc sınıfının kullanımını gösterir -

import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;

import java.io.File;
import javax.imageio.ImageIO;

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

public class Main {
   public static void main( String[] args ) { 
   
      try {
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         File input = new File("digital_image_processing.jpg");
         BufferedImage image = ImageIO.read(input);	

         byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
         Mat mat = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC3);
         mat.put(0, 0, data);

         Mat mat1 = new Mat(image.getHeight(),image.getWidth(),CvType.CV_8UC1);
         Imgproc.cvtColor(mat, mat1, Imgproc.COLOR_RGB2GRAY);

         byte[] data1 = new byte[mat1.rows() * mat1.cols() * (int)(mat1.elemSize())];
         mat1.get(0, 0, data1);
         BufferedImage image1 = new BufferedImage(mat1.cols(),mat1.rows(), BufferedImage.TYPE_BYTE_GRAY);
         image1.getRaster().setDataElements(0, 0, mat1.cols(), mat1.rows(), data1);

         File ouptut = new File("grayscale.jpg");
         ImageIO.write(image1, "jpg", ouptut);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen örneği yürüttüğünüzde, bir görüntü adını dönüştürür digital_image_processing.jpg eşdeğer Gri Tonlamalı görüntüsüne ve sabit diske adıyla yazar grayscale.jpg.

Gerçek görüntü

Gri Tonlamalı Görüntü

OpenCV kullanarak bir görüntünün renk uzayını diğerine değiştirmek için, görüntüyü BufferedImage ve onu dönüştür MatNesne. Söz dizimi aşağıda verilmiştir -

File input = new File("digital_image_processing.jpg");
BufferedImage image = ImageIO.read(input);
//convert Buffered Image to Mat.

OpenCv, tümü Imgproc sınıfında bulunabilen birçok renk dönüştürme türüne izin verir. Türlerden bazıları kısaca açıklanmıştır -

Sr.No. Renk Dönüştürme Türü
1 COLOR_RGB2BGR
2 COLOR_RGB2BGRA
3 COLOR_RGB2GRAY
4 COLOR_RGB2HLS
5 COLOR_RGB2HSV
6 COLOR_RGB2Luv
7 COLOR_RGB2YUV
8 COLOR_RGB2Lab

Herhangi bir renk dönüştürme türünden, uygun olanı yönteme geçirmeniz yeterlidir. cvtColor() içinde Imgprocsınıf. Söz dizimi aşağıda verilmiştir -

Imgproc.cvtColor(source mat, destination mat1, Color_Conversion_Code);

Yöntem cvtColor() kaynak görüntü matrisi, hedef görüntü matrisi ve renk dönüştürme türü olmak üzere üç parametre alır.

CvtColor () yönteminin yanı sıra, Imgproc sınıfı tarafından sağlanan başka yöntemler de vardır. Kısaca açıklanmıştır -

Sr.No. Yöntem ve Açıklama
1

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

Bir görüntüyü bir renk uzayından diğerine dönüştürür.

2

dilate(Mat src, Mat dst, Mat kernel)

Belirli bir yapılandırma öğesi kullanarak bir görüntüyü genişletir.

3

equalizeHist(Mat src, Mat dst)

Gri tonlamalı bir görüntünün histogramını eşitler.

4

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

Çekirdek ile bir görüntüyü birleştirir.

5

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

Bir Gauss filtresi kullanarak bir görüntüyü bulanıklaştırır.

6

integral(Mat src, Mat sum)

Bir görüntünün integralini hesaplar.

Misal

Aşağıdaki örnek, bir görüntüyü bir renk uzayından diğerine dönüştürmek için Imgproc sınıfının kullanımını gösterir.

import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;

import java.io.File;
import javax.imageio.ImageIO;

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

public class Main {
   public static void main( String[] args ) {
   
      try {
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         File input = new File("digital_image_processing.jpg");
         BufferedImage image = ImageIO.read(input);	
         byte[] data = ((DataBufferByte) image.getRaster().getDataBuffer()).getData();
         Mat mat = new Mat(image.getHeight(),image.getWidth(), CvType.CV_8UC3);
         mat.put(0, 0, data);

         Mat mat1 = new Mat(image.getHeight(), image.getWidth(), CvType.CV_8UC3);
         Imgproc.cvtColor(mat, mat1, Imgproc.COLOR_RGB2HSV);

         byte[] data1 = new byte[mat1.rows()*mat1.cols()*(int)(mat1.elemSize())];
         mat1.get(0, 0, data1);
         BufferedImage image1 = new BufferedImage(mat1.cols(), mat1.rows(), 5);
         image1.getRaster().setDataElements(0, 0, mat1.cols(), mat1.rows(), data1);

         File ouptut = new File("hsv.jpg");
         ImageIO.write(image1, "jpg", ouptut);
         
      } catch (Exception e) {
         System.out.println("Error: " + e.getMessage());
      }
   }
}

Çıktı

Verilen örneği yürüttüğünüzde, bir görüntü adını dönüştürür digital_image_processing.jpg eşdeğer HSV renk alanı görüntüsüne göre ve sabit diske adıyla yazar hsv.jpg.

Orijinal Görüntü (RGB)

Dönüştürülmüş Görüntü (HSV)