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 BufferedImage
sı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 BufferedImage
nesnelerin 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 |
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 |
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 |
7 | getMinX() Bunun minimum x koordinatını döndürür |
8 | getMinY() Bunun 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, BufferedImage
Graphics 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.