Java DIP — Введение
Цифровая обработка изображений (DIP) занимается манипулированием цифровыми изображениями с использованием цифрового компьютера. Это подполе сигналов и систем, но особое внимание уделяется изображениям. DIP фокусируется на разработке компьютерной системы, способной выполнять обработку изображения. Вход такой системы — цифровое изображение. Система обрабатывает изображение, используя эффективные алгоритмы, и выдает изображение в качестве вывода.
Java — это язык программирования высокого уровня, который широко используется в современном мире. Он может эффективно поддерживать и обрабатывать цифровую обработку изображений, используя различные функции.
Класс Java BufferedImage
Класс Java BufferedImage
является подклассом класса Image. Он используется для обработки и управления данными изображения. BufferedImage
сделан из ColorModel данных изображения. Все объекты BufferedImage
имеют координату верхнего левого угла (0, 0).
Конструкторы
Этот класс поддерживает три типа конструкторов.
Первый конструктор создает новый BufferedImage
с указанными ColorModel и Raster.
BufferedImage(ColorModel cm, WritableRaster raster, boolean isRasterPremultiplied, Hashtable<?,?> properties)
Второй конструктор создает BufferedImage
одного из предопределенных типов изображений.
BufferedImage(int width, int height, int imageType)
Третий конструктор создает BufferedImage
одного из предопределенных типов изображений: TYPE_BYTE_BINARY или TYPE_BYTE_INDEXED.
BufferedImage(int width, int height, int imageType, IndexColorModel cm)
Sr.No | Метод и описание |
---|---|
1 |
copyData (WritableRaster outRaster) Он вычисляет произвольную прямоугольную область |
2 |
getColorModel () Возвращает объект класса ColorModel изображения. |
3 |
получить данные() Возвращает изображение как одну большую плитку. |
4 |
getData (прямоугольник прямоугольник) Он вычисляет и возвращает произвольную область |
5 |
GetGraphics () Этот метод возвращает Graphics2D, сохраняет обратную совместимость. |
6 |
GetHeight () Возвращает высоту |
7 |
getMinX () Возвращает минимальную координату x этого |
8 |
getMinY () Возвращает минимальную координату y этого |
9 |
getRGB (int x, int y) Возвращает целочисленный пиксель в стандартной цветовой модели RGB (TYPE_INT_ARGB) и цветовом пространстве sRGB по умолчанию. |
10 |
GetType () Возвращает тип изображения. |
copyData (WritableRaster outRaster)
Он вычисляет произвольную прямоугольную область BufferedImage
и копирует ее в указанный WritableRaster.
getColorModel ()
Возвращает объект класса ColorModel изображения.
получить данные()
Возвращает изображение как одну большую плитку.
getData (прямоугольник прямоугольник)
Он вычисляет и возвращает произвольную область BufferedImage
.
GetGraphics ()
Этот метод возвращает Graphics2D, сохраняет обратную совместимость.
GetHeight ()
Возвращает высоту BufferedImage
.
getMinX ()
Возвращает минимальную координату x этого BufferedImage
.
getMinY ()
Возвращает минимальную координату y этого BufferedImage
.
getRGB (int x, int y)
Возвращает целочисленный пиксель в стандартной цветовой модели RGB (TYPE_INT_ARGB) и цветовом пространстве sRGB по умолчанию.
GetType ()
Возвращает тип изображения.
пример
В следующем примере демонстрируется использование класса Java BufferedImage
который рисует некоторый текст на экране, используя графический объект —
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); } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Загрузка и загрузка изображений
В этой главе мы увидим, как вы можете загрузить изображение из Интернета, выполнить некоторые методы обработки изображения, а затем снова загрузить обработанное изображение на сервер.
Загрузка изображения
Чтобы загрузить изображение с веб-сайта, мы используем класс Java с именем URL , который можно найти в пакете java.net . Его синтаксис приведен ниже —
String website = "http://tutorialspoint.com"; URL url = new URL(website);
Помимо описанного выше метода, в URL-адресе класса доступны и другие методы, которые кратко описаны ниже.
Sr.No. | Метод и описание |
---|---|
1 |
public String getPath () Возвращает путь URL. |
2 |
public String getQuery () Возвращает часть запроса URL. |
3 |
public String getAuthority () Возвращает авторитет URL. |
4 |
public int getPort () Возвращает порт URL. |
5 |
public int getDefaultPort () Возвращает порт по умолчанию для протокола URL. |
6 |
public String getProtocol () Возвращает протокол URL. |
7 |
public String getHost () Возвращает хост URL. |
public String getPath ()
Возвращает путь URL.
public String getQuery ()
Возвращает часть запроса URL.
public String getAuthority ()
Возвращает авторитет URL.
public int getPort ()
Возвращает порт URL.
public int getDefaultPort ()
Возвращает порт по умолчанию для протокола URL.
public String getProtocol ()
Возвращает протокол URL.
public String getHost ()
Возвращает хост URL.
пример
В следующем примере демонстрируется использование класса URL Java для загрузки изображения из Интернета.
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()); } } }
Выход
Когда вы выполните приведенное выше, вы увидите следующий вывод.
Было бы загрузить следующее изображение с сервера.
Загрузка изображения
Давайте посмотрим, как загрузить изображение на веб-сервер. Мы преобразуем BufferedImage в байтовый массив, чтобы отправить его на сервер.
Мы используем Java-класс ByteArrayOutputStream , который можно найти в пакете java.io. Его синтаксис приведен ниже —
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(image, "jpg", baos);
Чтобы преобразовать изображение в байтовый массив, мы используем метод toByteArray () класса ByteArrayOutputStream . Его синтаксис приведен ниже —
byte[] bytes = baos.toByteArray();
Помимо описанного выше метода, в классе ByteArrayOutputStream доступны и другие методы, которые кратко описаны ниже.
Sr.No. | Метод и описание |
---|---|
1 |
public void reset () Этот метод сбрасывает число действительных байтов выходного потока массива байтов до нуля, так что весь накопленный вывод в потоке отбрасывается. |
2 |
public byte [] toByteArray () Этот метод создает вновь выделенный байтовый массив. Его размер будет текущим размером выходного потока, и содержимое буфера будет скопировано в него. Он возвращает текущее содержимое выходного потока в виде байтового массива. |
3 |
public String toString () Преобразует содержимое буфера в строку. Перевод будет выполнен в соответствии с кодировкой символов по умолчанию. Возвращает строку, переведенную из содержимого буфера. |
4 |
публичный void write (int w) Записывает указанный массив в выходной поток. |
5 |
public void write (byte [] b, int of, int len) Он записывает len количество байтов, начиная со смещения в поток. |
6 |
public void writeTo (OutputStream outSt) Он записывает все содержимое этого потока в указанный аргумент потока. |
public void reset ()
Этот метод сбрасывает число действительных байтов выходного потока массива байтов до нуля, так что весь накопленный вывод в потоке отбрасывается.
public byte [] toByteArray ()
Этот метод создает вновь выделенный байтовый массив. Его размер будет текущим размером выходного потока, и содержимое буфера будет скопировано в него. Он возвращает текущее содержимое выходного потока в виде байтового массива.
public String toString ()
Преобразует содержимое буфера в строку. Перевод будет выполнен в соответствии с кодировкой символов по умолчанию. Возвращает строку, переведенную из содержимого буфера.
публичный void write (int w)
Записывает указанный массив в выходной поток.
public void write (byte [] b, int of, int len)
Он записывает len количество байтов, начиная со смещения в поток.
public void writeTo (OutputStream outSt)
Он записывает все содержимое этого потока в указанный аргумент потока.
пример
В следующем примере демонстрируется ByteArrayOutputStream для загрузки изображения на сервер —
Код клиента
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(); } }
Код сервера
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); } }
Выход
Вывод на стороне клиента
Когда вы выполняете код клиента, на стороне клиента появляется следующий вывод:
Вывод на стороне сервера
Когда вы выполняете код сервера, на стороне сервера появляется следующий выход —
После получения изображения сервер отображает изображение, как показано ниже —
Java DIP — пиксели изображения
Изображение содержит двумерный массив пикселей. Это на самом деле значение тех пикселей, которые составляют изображение. Обычно изображение может быть цветным или в оттенках серого.
В Java класс BufferedImage используется для обработки изображений. Вам нужно вызвать метод getRGB () класса BufferedImage, чтобы получить значение пикселя.
Получение значения пикселя
Значение пикселя может быть получено с использованием следующего синтаксиса:
Color c = new Color(image.getRGB(j, i));
Получение значений RGB
Метод getRGB () принимает индекс строки и столбца в качестве параметра и возвращает соответствующий пиксель. В случае цветного изображения, он возвращает три значения (красный, зеленый, синий). Их можно получить следующим образом
c.getRed(); c.getGreen(); c.getBlue();
Получение ширины и высоты изображения
Высоту и ширину изображения можно получить, вызвав методы getWidth () и getHeight () класса BufferedImage. Его синтаксис приведен ниже.
int width = image.getWidth(); int height = image.getHeight();
Помимо этих методов, в классе BufferedImage поддерживаются и другие методы. Они кратко описаны
Sr.No. | Метод и описание |
---|---|
1 |
copyData (WritableRaster outRaster) Он вычисляет произвольную прямоугольную область BufferedImage и копирует ее в указанный WritableRaster. |
2 |
getColorModel () Возвращает ColorModel изображения. |
3 |
получить данные() Возвращает изображение как одну большую плитку. |
4 |
getData (прямоугольник прямоугольник) Он вычисляет и возвращает произвольную область BufferedImage. |
5 |
GetGraphics () Этот метод возвращает Graphics2D, но здесь для обратной совместимости. |
6 |
GetHeight () Возвращает высоту BufferedImage. |
7 |
getMinX () Возвращает минимальную координату x этого BufferedImage. |
8 |
getMinY () Возвращает минимальную координату y этого BufferedImage. |
9 |
getRGB (int x, int y) Возвращает целочисленный пиксель в стандартной цветовой модели RGB (TYPE_INT_ARGB) и цветовом пространстве sRGB по умолчанию. |
10 |
GetType () Возвращает тип изображения. |
copyData (WritableRaster outRaster)
Он вычисляет произвольную прямоугольную область BufferedImage и копирует ее в указанный WritableRaster.
getColorModel ()
Возвращает ColorModel изображения.
получить данные()
Возвращает изображение как одну большую плитку.
getData (прямоугольник прямоугольник)
Он вычисляет и возвращает произвольную область BufferedImage.
GetGraphics ()
Этот метод возвращает Graphics2D, но здесь для обратной совместимости.
GetHeight ()
Возвращает высоту BufferedImage.
getMinX ()
Возвращает минимальную координату x этого BufferedImage.
getMinY ()
Возвращает минимальную координату y этого BufferedImage.
getRGB (int x, int y)
Возвращает целочисленный пиксель в стандартной цветовой модели RGB (TYPE_INT_ARGB) и цветовом пространстве sRGB по умолчанию.
GetType ()
Возвращает тип изображения.
пример
В следующем примере демонстрируется использование Java-класса BufferedImage, который отображает пиксели изображения размером (100 x 100) —
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(); } }
Выход
Когда вы выполните приведенный выше пример, он напечатает пиксели следующего изображения —
Исходное изображение
Выход пикселей
Если вы прокрутите выходной сигнал вниз, будет виден следующий шаблон:
Java DIP — Преобразование GrayScale
Чтобы преобразовать цветное изображение в изображение в градациях серого, необходимо прочитать пиксели или данные изображения, используя объекты File и ImageIO , и сохранить изображение в объекте BufferedImage . Его синтаксис приведен ниже —
File input = new File("digital_image_processing.jpg"); BufferedImage image = ImageIO.read(input);
Далее, получите значение пикселя с помощью метода getRGB () и выполните для него метод GrayScale (). Метод getRGB () принимает индекс строки и столбца в качестве параметра.
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);
Помимо этих трех методов, в классе Color доступны и другие методы, которые кратко описаны ниже.
Sr.No. | Метод и описание |
---|---|
1 |
ярче () Это создает новый Цвет, который является более яркой версией этого Цвета. |
2 |
темнее () Он создает новый цвет, который является более темной версией этого цвета. |
3 |
getAlpha () Возвращает альфа-компонент в диапазоне 0-255. |
4 |
getHSBColor (float h, float s, float b) Он создает объект Color на основе указанных значений для цветовой модели HSB. |
5 |
HSBtoRGB (цвет поплавка, насыщенность поплавка, яркость поплавка) Он преобразует компоненты цвета, как определено моделью HSB, в эквивалентный набор значений для модели RGB по умолчанию. |
6 |
нанизывать() Возвращает строковое представление этого цвета. |
ярче ()
Это создает новый Цвет, который является более яркой версией этого Цвета.
темнее ()
Он создает новый цвет, который является более темной версией этого цвета.
getAlpha ()
Возвращает альфа-компонент в диапазоне 0-255.
getHSBColor (float h, float s, float b)
Он создает объект Color на основе указанных значений для цветовой модели HSB.
HSBtoRGB (цвет поплавка, насыщенность поплавка, яркость поплавка)
Он преобразует компоненты цвета, как определено моделью HSB, в эквивалентный набор значений для модели RGB по умолчанию.
нанизывать()
Возвращает строковое представление этого цвета.
Последний шаг — добавить все эти три значения и снова установить для них значение соответствующего пикселя. Его синтаксис приведен ниже —
int sum = red+green+blue; Color newColor = new Color(sum,sum,sum); image.setRGB(j,i,newColor.getRGB());
пример
В следующем примере демонстрируется использование класса Java BufferedImage, который преобразует изображение в оттенки серого —
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(); } }
Выход
Когда вы выполняете данный пример, он преобразует изображение digital_image_processing.jpg в его эквивалентное изображение в градациях серого и записывает его на жесткий диск с именем grayscale.jpg .
Исходное изображение
Изображение в градациях серого
Java DIP — повышение контрастности изображения
В этой главе вы узнаете, как повысить контрастность изображения с помощью выравнивания гистограммы.
Мы используем метод OpenCV equizeHist () . Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
Imgproc.equalizeHist(source, destination);
Параметры описаны ниже —
Sr.No. | Параметр и описание |
---|---|
1 |
Источник Это 8-битное одноканальное исходное изображение. |
2 |
Место назначения Это изображение назначения. |
Источник
Это 8-битное одноканальное исходное изображение.
Место назначения
Это изображение назначения.
Помимо метода equalizeHist (), есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int ddepth, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int ddepth, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для повышения контрастности изображения.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Улучшенное контрастное изображение
Java DIP — повышение яркости изображения
В этой главе мы повышаем яркость изображения, умножая каждый пиксель изображения на альфа-значение и добавляя к нему еще одно бета-значение.
У OpenCV есть функция convertTo, которая выполняет вышеуказанную операцию автоматически. Его можно найти под пакетом Mat . Его синтаксис приведен ниже —
int alpha = 2; int beta = 50; sourceImage.convertTo(destination, rtype , alpha, beta);
Параметры описаны ниже —
Sr.No. | Параметр и описание |
---|---|
1 |
место назначения Это изображение назначения. |
2 |
RTYPE Это желаемый тип выходной матрицы или, скорее, глубина, так как количество каналов совпадает с входным. если rtype отрицателен, выходная матрица будет иметь тот же тип, что и входная. |
3 |
альфа Это необязательный масштабный коэффициент. |
4 |
бета Это необязательная дельта, добавленная к масштабированным значениям. |
место назначения
Это изображение назначения.
RTYPE
Это желаемый тип выходной матрицы или, скорее, глубина, так как количество каналов совпадает с входным. если rtype отрицателен, выходная матрица будет иметь тот же тип, что и входная.
альфа
Это необязательный масштабный коэффициент.
бета
Это необязательная дельта, добавленная к масштабированным значениям.
Помимо метода convertTo, есть класс, предоставленный классом Mat. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
AdjustROI (int dtop, int dbottom, int dleft, int dright) Он регулирует размер и положение подматрицы в родительской матрице. |
2 |
copyTo (Mat m) Копирует матрицу в другую. |
3 |
Diag () Он извлекает диагональ из матрицы или создает диагональную матрицу. |
4 |
точка (мат м) Он вычисляет скалярное произведение двух векторов. |
5 |
изменить (int cn) Он изменяет форму и / или количество каналов 2D-матрицы без копирования данных. |
6 |
submat (Range rowRange, Range colRange) Извлекает прямоугольную подматрицу. |
AdjustROI (int dtop, int dbottom, int dleft, int dright)
Он регулирует размер и положение подматрицы в родительской матрице.
copyTo (Mat m)
Копирует матрицу в другую.
Diag ()
Он извлекает диагональ из матрицы или создает диагональную матрицу.
точка (мат м)
Он вычисляет скалярное произведение двух векторов.
изменить (int cn)
Он изменяет форму и / или количество каналов 2D-матрицы без копирования данных.
submat (Range rowRange, Range colRange)
Извлекает прямоугольную подматрицу.
пример
В следующем примере демонстрируется использование класса Mat для повышения яркости изображения.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Улучшенное яркое изображение (альфа = 1 и бета = 50)
Улучшенное яркое изображение (альфа = 2 и бета = 50)
Java DIP — повышение резкости изображения
В этой главе мы научимся увеличивать резкость изображения, используя фильтр Гаусса.
Сначала мы используем функцию OpenCV GaussianBlur . Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
Imgproc.GaussianBlur(source, destination, new Size(0,0), sigmaX);
Параметры описаны кратко —
Sr.No. | Параметр и описание |
---|---|
1 |
источник Это исходное изображение. |
2 |
место назначения Это изображение назначения. |
3 |
Размер Это размер ядра Гаусса. |
4 |
sigmaX Это стандартное отклонение ядра Гаусса в направлении X. |
источник
Это исходное изображение.
место назначения
Это изображение назначения.
Размер
Это размер ядра Гаусса.
sigmaX
Это стандартное отклонение ядра Гаусса в направлении X.
Кроме того, мы используем функцию OpenCV addWeighted, чтобы применить водяной знак изображения к изображению. Его можно найти под пакетом Core . Его синтаксис приведен ниже —
Core.addWeighted(InputArray src1, alpha, src2, beta, gamma, OutputArray dst);
Параметры этой функции описаны ниже —
Sr.No. | Параметр и описание |
---|---|
1 |
src1 Это первый входной массив. |
2 |
альфа Это вес первых элементов массива. |
3 |
src2 Это второй входной массив того же размера и номера канала, что и src1. |
4 |
Бета Это вес элементов второго массива. |
5 |
гамма Это скаляр добавляется к каждой сумме. |
6 |
ДСТ Это выходной массив, который имеет тот же размер и количество каналов, что и входные массивы. |
src1
Это первый входной массив.
альфа
Это вес первых элементов массива.
src2
Это второй входной массив того же размера и номера канала, что и src1.
Бета
Это вес элементов второго массива.
гамма
Это скаляр добавляется к каждой сумме.
ДСТ
Это выходной массив, который имеет тот же размер и количество каналов, что и входные массивы.
Помимо метода GaussianBlur, существуют другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование классов Imgproc и Core для применения резкости к изображению.
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) { } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Резкое изображение
Java DIP — метод сжатия изображений
Изображение может быть легко сжато и сохранено через Java. Сжатие изображения включает в себя преобразование изображения в JPG и сохранение его.
Чтобы сжать изображение, мы читаем изображение и конвертируем в объект BufferedImage.
Далее, мы получаем ImageWriter из метода getImageWritersByFormatName (), найденного в классе ImageIO. Из этого ImageWriter создайте объект ImageWriteParam . Его синтаксис приведен ниже —
Iterator<ImageWriter> list = ImageIO.getImageWritersByFormatName("jpg"); ImageWriteParam obj = writer_From_List.getDefaultWriteParam();
Из этого объекта ImageWriteParam вы можете установить сжатие, вызвав эти два метода — setCompressionMode () и setCompressionQuality () . Их синтаксис как указано ниже —
obj.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); obj.setCompressionQuality(0.05f);
Метод setCompressionMode () принимает Mode_EXPLICIT в качестве параметра. Некоторые из других режимов описаны кратко —
Sr.No. | Режимы |
---|---|
1 |
MODE_DEFAULT Это постоянное значение, которое можно передать в методы, чтобы включить эту функцию для будущих записей. |
2 |
MODE_DISABLED Это постоянное значение, которое можно передать в методы, чтобы отключить эту функцию для будущих записей. |
3 |
MODE_EXPLICIT Это постоянное значение, которое можно передать в методы, чтобы включить эту функцию для будущих записей. |
MODE_DEFAULT
Это постоянное значение, которое можно передать в методы, чтобы включить эту функцию для будущих записей.
MODE_DISABLED
Это постоянное значение, которое можно передать в методы, чтобы отключить эту функцию для будущих записей.
MODE_EXPLICIT
Это постоянное значение, которое можно передать в методы, чтобы включить эту функцию для будущих записей.
Помимо методов сжатия существуют другие методы, предоставляемые классом ImageWriteParam. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
canOffsetTiles () Он возвращает true, если писатель может выполнять мозаику с ненулевыми смещениями сетки во время записи. |
2 |
getBitRate (качество с плавающей точкой) Он возвращает число с плавающей запятой, указывающее оценку количества битов выходных данных для каждого бита данных входного изображения на данном уровне качества. |
3 |
GetLocale () Возвращает текущую установленную локаль или ноль, если поддерживается только локаль по умолчанию. |
4 |
isCompressionLossless () Возвращает true, если текущий тип сжатия обеспечивает сжатие без потерь. |
5 |
unsetCompression () Он удаляет любой предыдущий тип сжатия и настройки качества. |
6 |
unsetTiling () Он удаляет все предыдущие параметры мозаичной сетки, указанные в вызовах setTiling. |
canOffsetTiles ()
Он возвращает true, если писатель может выполнять мозаику с ненулевыми смещениями сетки во время записи.
getBitRate (качество с плавающей точкой)
Он возвращает число с плавающей запятой, указывающее оценку количества битов выходных данных для каждого бита данных входного изображения на данном уровне качества.
GetLocale ()
Возвращает текущую установленную локаль или ноль, если поддерживается только локаль по умолчанию.
isCompressionLossless ()
Возвращает true, если текущий тип сжатия обеспечивает сжатие без потерь.
unsetCompression ()
Он удаляет любой предыдущий тип сжатия и настройки качества.
unsetTiling ()
Он удаляет все предыдущие параметры мозаичной сетки, указанные в вызовах setTiling.
пример
В следующем примере демонстрируется использование класса ImageWriteParam для сжатия изображения.
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(); } }
Выход
Когда вы выполняете данный код, он сжимает изображение digital_image_processing.jpg в его эквивалентное сжатое изображение и записывает его на жесткий диск с именем compress.jpg .
Исходное изображение
Сжатое изображение — фактор качества — 0,05
Сжатое изображение — добротность — 0,5
Java DIP — Добавление границы
В этой главе мы учимся добавлять различные типы границ к изображению.
Мы используем функцию OpenCV copyMakeBorder . Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
Imgproc.copyMakeBorder(source,destination,top,bottom,left,right,borderType);
Параметры описаны ниже —
Sr.No. | Параметр и описание |
---|---|
1 |
источник Это исходное изображение. |
2 |
место назначения Это изображение назначения. |
3 |
Топ Это длина в пикселях границы в верхней части изображения. |
4 |
низ Длина в пикселях границы внизу изображения. |
5 |
оставил Это длина в пикселях границы слева от изображения. |
6 |
право Это длина в пикселях границы в правой части изображения. |
7 |
borderType Он определяет тип границы. Возможные границы: BORDER_REPLICATE, BORDER_REFLECT, BORDER_WRAP, BORDER_CONSTANT и т. Д. |
источник
Это исходное изображение.
место назначения
Это изображение назначения.
Топ
Это длина в пикселях границы в верхней части изображения.
низ
Длина в пикселях границы внизу изображения.
оставил
Это длина в пикселях границы слева от изображения.
право
Это длина в пикселях границы в правой части изображения.
borderType
Он определяет тип границы. Возможные границы: BORDER_REPLICATE, BORDER_REFLECT, BORDER_WRAP, BORDER_CONSTANT и т. Д.
Помимо метода copyMakeBorder (), есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для добавления рамки к изображению —
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Изолированное изображение границы
Обернутые границы изображения
Reflect Border Image
Java DIP — Пирамиды изображений
Пирамида изображения — это не что иное, как метод отображения изображения с несколькими разрешениями. Самый нижний слой — это версия изображения с самым высоким разрешением, а самый верхний слой — это версия изображения с самым низким разрешением. Пирамиды изображений используются для обработки изображений в разных масштабах.
В этой главе мы выполняем некоторую понижающую и повышающую дискретизацию изображений.
Мы используем функции OpenCV pyrUp и pyrDown . Их можно найти в пакете Imgproc . Его синтаксис приведен ниже —
Imgproc.pyrUp(source, destination, destinationSize); Imgproc.pyrDown(source, destination,destinationSize);
Параметры описаны ниже —
Sr.No. | Параметр и описание |
---|---|
1 |
источник Это исходное изображение. |
2 |
место назначения Это изображение назначения. |
3 |
destinationSize Это размер выходного изображения. По умолчанию он вычисляется как Размер ((src.cols * 2), (src.rows * 2)). |
источник
Это исходное изображение.
место назначения
Это изображение назначения.
destinationSize
Это размер выходного изображения. По умолчанию он вычисляется как Размер ((src.cols * 2), (src.rows * 2)).
Помимо методов pyrUp и pyrDown, есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для выполнения выборки вверх и вниз для изображения.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
На исходном изображении выполняются pyrUp (UP Sampling) и pyrDown (Down Sampling). Вывод после выборки, как показано ниже —
PyrUP Image
Изображение pyrDown
Java DIP — базовый порог
Thresholding позволяет добиться сегментации изображения самым простым способом. Сегментация изображения означает разделение полного изображения на набор пикселей таким образом, чтобы пиксели в каждом наборе имели некоторые общие характеристики. Сегментация изображений очень полезна при определении объектов и их границ.
В этой главе мы выполним некоторые основные операции с порогами для изображений.
Мы используем порог функции OpenCV . Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
Imgproc.threshold(source, destination, thresh , maxval , type);
Параметры описаны ниже —
Sr.No. | Параметр и описание |
---|---|
1 |
источник Это исходное изображение. |
2 |
место назначения Это изображение назначения. |
3 |
молотить Это пороговое значение. |
4 |
MAXVAL Это максимальное значение, которое будет использоваться с пороговыми типами THRESH_BINARY и THRESH_BINARY_INV. |
5 |
тип Возможные типы: THRESH_BINARY, THRESH_BINARY_INV, THRESH_TRUNC и THRESH_TOZERO. |
источник
Это исходное изображение.
место назначения
Это изображение назначения.
молотить
Это пороговое значение.
MAXVAL
Это максимальное значение, которое будет использоваться с пороговыми типами THRESH_BINARY и THRESH_BINARY_INV.
тип
Возможные типы: THRESH_BINARY, THRESH_BINARY_INV, THRESH_TRUNC и THRESH_TOZERO.
Помимо этих методов порогового значения, существуют другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int ddepth, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int ddepth, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для выполнения операций с порогом изображения:
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
На приведенном выше исходном изображении выполняются некоторые операции пороговой обработки, что показано в выводе ниже:
Молот бинарный
Thresh Binary Invert
Молот Ноль
Java DIP — преобразование формы изображения
Форму изображения можно легко изменить с помощью OpenCV. Изображение может быть перевернуто, масштабировано или повернуто в любом из четырех направлений.
Чтобы изменить форму изображения, мы читаем изображение и конвертируем в объект Mat. Его синтаксис приведен ниже —
File input = new File("digital_image_processing.jpg"); BufferedImage image = ImageIO.read(input); //convert Buffered Image to Mat.
Листать изображение
OpenCV допускает три типа флип-кодов, которые описаны ниже —
Sr.No. | Флип-код и описание |
---|---|
1 |
0 0 означает, переворачивая вокруг оси х. |
2 |
1 1 означает, что переворачивается вокруг оси y. |
3 |
-1 -1 означает, переворачивая обе оси. |
0
0 означает, переворачивая вокруг оси х.
1
1 означает, что переворачивается вокруг оси y.
-1
-1 означает, переворачивая обе оси.
Мы передаем соответствующий flip-код в метод flip () класса Core . Его синтаксис приведен ниже —
Core.flip(source mat, destination mat1, flip_code);
Метод flip () принимает три параметра — матрицу исходного изображения, матрицу целевого изображения и код отражения.
Помимо метода flip, класс Core предоставляет и другие методы. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
добавить (Mat src1, Mat src2, Mat dst) Он рассчитывает для каждого элемента сумму двух массивов или массива и скаляра. |
2 |
bitwise_and (Mat src1, Mat src2, Mat dst) Он рассчитывает для каждого элемента побитовое соединение двух массивов или массива и скаляра. |
3 |
bitwise_not (Mat src, Mat dst) Он инвертирует каждый бит массива. |
4 |
круг (Mat img, центр точки, внутренний радиус, скалярный цвет) Это рисует круг. |
5 |
sumElems (Mat src) Размытие изображения с использованием фильтра Гаусса. |
6 |
вычитать (Mat src1, Scalar src2, Mat dst, Mat mask) Он рассчитывает разницу между элементами для двух массивов или массивов и скаляра. |
добавить (Mat src1, Mat src2, Mat dst)
Он рассчитывает для каждого элемента сумму двух массивов или массива и скаляра.
bitwise_and (Mat src1, Mat src2, Mat dst)
Он рассчитывает для каждого элемента побитовое соединение двух массивов или массива и скаляра.
bitwise_not (Mat src, Mat dst)
Он инвертирует каждый бит массива.
круг (Mat img, центр точки, внутренний радиус, скалярный цвет)
Это рисует круг.
sumElems (Mat src)
Размытие изображения с использованием фильтра Гаусса.
вычитать (Mat src1, Scalar src2, Mat dst, Mat mask)
Он рассчитывает разницу между элементами для двух массивов или массивов и скаляра.
пример
В следующем примере демонстрируется использование класса Core для переворачивания изображения.
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()); } } }
Выход
Когда вы запустите приведенный выше пример, он перевернет имя изображения digital_image_processing.jpg в его эквивалентное изображение цветового пространства HSV и запишет его на жесткий диск с именем flip.jpg .
Исходное изображение
Перевернутое изображение
Java DIP — применение фильтра Гаусса
В этой главе мы применяем фильтр Гаусса к изображению, которое размывает изображение. Мы собираемся использовать функцию OpenCV GaussianBlur для применения фильтра Гаусса к изображениям. Его можно найти в пакете Imgproc. Его синтаксис приведен ниже —
Imgproc.GaussianBlur(source, destination,Size,SigmaX);
Аргументы функции описаны ниже —
Sr.No. | Аргумент и описание |
---|---|
1 |
источник Это исходное изображение. |
2 |
место назначения Это изображение назначения. |
3 |
Размер Это размер ядра Гаусса. |
4 |
SigmaX Это стандартное отклонение ядра Гаусса в направлении X. |
источник
Это исходное изображение.
место назначения
Это изображение назначения.
Размер
Это размер ядра Гаусса.
SigmaX
Это стандартное отклонение ядра Гаусса в направлении X.
Помимо метода GaussianBlur, существуют другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для применения фильтра Гаусса к изображению.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Когда это исходное изображение свернуто с гауссовым фильтром размером 11 и 45, виден следующий результат.
Гауссов фильтр размером 11
Гауссов фильтр 45 размера
Java DIP — применение Box Filter
Мы применяем фильтр Box, который размывает изображение. Фильтр Box может иметь размеры 3×3, 5×5, 9×9 и т. Д.
Мы используем функцию OpenCV filter2D, чтобы применить фильтр Box к изображениям. Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Аргументы функции описаны ниже —
Sr.No. | Аргумент и описание |
---|---|
1 |
ЦСИ Это исходное изображение. |
2 |
ДСТ Это изображение назначения. |
3 |
глубина Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника. |
4 |
ядро Это ядро для сканирования через изображение. |
5 |
якорь Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию. |
6 |
дельта Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0. |
7 |
BORDER_DEFAULT Мы допустим это значение по умолчанию. |
ЦСИ
Это исходное изображение.
ДСТ
Это изображение назначения.
глубина
Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника.
ядро
Это ядро для сканирования через изображение.
якорь
Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию.
дельта
Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0.
BORDER_DEFAULT
Мы допустим это значение по умолчанию.
Помимо метода filter2D (), есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для применения фильтра Box к изображению в градациях серого.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
В этом примере мы сворачиваем наше изображение с помощью следующего фильтра (ядра). Этот фильтр приводит к размытию изображения при увеличении его размера.
Это оригинальное изображение было свернуто с помощью фильтра размером 5, который приведен ниже —
Коробчатый фильтр размера 5
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 |
Свернутое изображение (с коробчатым фильтром размера 5)
Свернутое изображение (с рамочным фильтром размера 9)
Java DIP — эрозия и расширение
В этой главе мы научимся применять два очень распространенных морфологических оператора: дилатация и эрозия.
Мы используем функцию OpenCV разрушать и расширять . Их можно найти в пакете Imgproc . Его синтаксис приведен ниже —
Imgproc.erode(source, destination, element); Imgproc.dilate(source, destination, element);
Параметры описаны ниже —
Sr.No. | Параметр и описание |
---|---|
1 |
источник Это исходное изображение. |
2 |
место назначения Это изображение назначения. |
3 |
элемент Это структурирующий элемент, используемый для эрозии и расширения, если element = Mat (), используется прямоугольный структурирующий элемент 3 x 3. |
источник
Это исходное изображение.
место назначения
Это изображение назначения.
элемент
Это структурирующий элемент, используемый для эрозии и расширения, если element = Mat (), используется прямоугольный структурирующий элемент 3 x 3.
Помимо методов erode () и dlate (), есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для эрозии и расширения изображения.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
На приведенном выше исходном изображении были выполнены некоторые операции эрозии и расширения, которые были показаны в выходных данных ниже —
размывание
расширение
Java DIP — применение водяных знаков
В этой главе мы изучаем два способа нанесения водяных знаков на изображения. Эти способы —
- Применение текстового водяного знака
- Применение изображения водяного знака
Применение текстового водяного знака
Мы используем функцию OpenCV putText для нанесения водяного знака на изображение. Его можно найти под пакетом Core . Его синтаксис приведен ниже —
Core.putText(source, Text, Point, fontFace ,fontScale , color);
Параметры этой функции описаны ниже —
Sr.No. | Параметр и описание |
---|---|
1 |
Источник Это исходное изображение. |
2 |
Текст Это текст строки, который появится на изображении. |
3 |
точка Это точка, где текст должен появиться на изображении. |
4 |
fontFace Тип шрифта. Например — FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX и т. Д. |
5 |
fontScale Это масштабный коэффициент шрифта, который умножается на базовый размер шрифта. |
6 |
цвет Это цвет текста. |
Источник
Это исходное изображение.
Текст
Это текст строки, который появится на изображении.
точка
Это точка, где текст должен появиться на изображении.
fontFace
Тип шрифта. Например — FONT_HERSHEY_SIMPLEX, FONT_HERSHEY_PLAIN, FONT_HERSHEY_COMPLEX и т. Д.
fontScale
Это масштабный коэффициент шрифта, который умножается на базовый размер шрифта.
цвет
Это цвет текста.
Помимо метода putText, класс Core предоставляет и другие методы. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
нормализовать (Mat src, Mat dst, двойная альфа, двойная бета, int norm_type) Это нормализует диапазон норм или значений массива. |
2 |
перспективаПреобразование (Mat src, Mat dst, Mat m) Выполняет перспективное матричное преобразование векторов. |
3 |
фаза (Mat x, Mat y, угол Mat) Он рассчитывает угол поворота 2D векторов. |
4 |
прямоугольник (Mat img, точка pt1, точка pt2, скалярный цвет) Он рисует простой, толстый или заполненный прямоугольник справа вверх. |
5 |
Reduce (Mat src, Mat dst, int dim, int rtype, int dtype) Это сводит матрицу к вектору. |
6 |
преобразование (Mat src, Mat dst, Mat m) Он выполняет матричное преобразование каждого элемента массива. |
нормализовать (Mat src, Mat dst, двойная альфа, двойная бета, int norm_type)
Это нормализует диапазон норм или значений массива.
перспективаПреобразование (Mat src, Mat dst, Mat m)
Выполняет перспективное матричное преобразование векторов.
фаза (Mat x, Mat y, угол Mat)
Он рассчитывает угол поворота 2D векторов.
прямоугольник (Mat img, точка pt1, точка pt2, скалярный цвет)
Он рисует простой, толстый или заполненный прямоугольник справа вверх.
Reduce (Mat src, Mat dst, int dim, int rtype, int dtype)
Это сводит матрицу к вектору.
преобразование (Mat src, Mat dst, Mat m)
Он выполняет матричное преобразование каждого элемента массива.
пример
В следующем примере демонстрируется использование класса Core для применения текстового водяного знака к изображению.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Текст с водяным знаком
Нанесение водяного знака на изображение
Мы собираемся использовать функцию OpenCV addWeighted, чтобы применить к изображению водяной знак. Его можно найти под пакетом Core . Его синтаксис приведен ниже —
Core.addWeighted(InputArray src1, alpha, src2 (Watermark image), beta, gamma, OutputArray dst);
Параметры этой функции описаны ниже —
Sr.No. | Параметр и описание |
---|---|
1 |
src1 Это первый входной массив. |
2 |
альфа Это вес первых элементов массива. |
3 |
src2 Это второй входной массив того же размера и номера канала, что и src1. |
4 |
бета Это вес элементов второго массива. |
5 |
гамма Это скаляр, добавленный к каждой сумме. |
6 |
ДСТ Это выходной массив, который имеет тот же размер и количество каналов, что и входные массивы. |
src1
Это первый входной массив.
альфа
Это вес первых элементов массива.
src2
Это второй входной массив того же размера и номера канала, что и src1.
бета
Это вес элементов второго массива.
гамма
Это скаляр, добавленный к каждой сумме.
ДСТ
Это выходной массив, который имеет тот же размер и количество каналов, что и входные массивы.
пример
В следующем примере демонстрируется использование класса Core для применения водяного знака изображения к изображению.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Изображение водяного знака
Изображение с водяным знаком
Java DIP — понимать свертку
Свертка — это математическая операция над двумя функциями f и g. Функции f и g в этом случае являются изображениями, поскольку изображение также является двумерной функцией.
Выполнение свертки
Чтобы выполнить свертку на изображении, предпринимаются следующие шаги:
- Переверните маску (по горизонтали и вертикали) только один раз.
- Наденьте маску на изображение.
- Умножьте соответствующие элементы, а затем добавьте их.
- Повторяйте эту процедуру, пока все значения изображения не будут рассчитаны.
Мы используем функцию OpenCV filter2D для применения свертки к изображениям. Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Аргументы функции описаны ниже —
Sr.No. | Аргумент и описание |
---|---|
1 |
ЦСИ Это исходное изображение. |
2 |
ДСТ Это изображение назначения. |
3 |
глубина Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника. |
4 |
ядро Это ядро для сканирования через изображение. |
5 |
якорь Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию. |
6 |
дельта Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0. |
7 |
BORDER_DEFAULT Мы допустим это значение по умолчанию. |
ЦСИ
Это исходное изображение.
ДСТ
Это изображение назначения.
глубина
Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника.
ядро
Это ядро для сканирования через изображение.
якорь
Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию.
дельта
Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0.
BORDER_DEFAULT
Мы допустим это значение по умолчанию.
пример
В следующем примере демонстрируется использование класса Imgproc для выполнения свертки изображения серой шкалы.
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()); } } }
Выход
В этом примере мы сворачиваем наше изображение с помощью следующего фильтра (ядра). Этот фильтр приводит к созданию исходного изображения, как оно есть —
0 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
Исходное изображение
Свернутое изображение
Java DIP — оператор Prewitt
Оператор Prewitt используется для обнаружения краев на изображении. Он обнаруживает два типа ребер: вертикальные ребра и горизонтальные ребра.
Мы используем функцию OpenCV filter2D для применения оператора Prewitt к изображениям. Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Аргументы функции описаны ниже —
Sr.No. | Аргумент и описание |
---|---|
1 |
ЦСИ Это исходное изображение. |
2 |
ДСТ Это изображение назначения. |
3 |
глубина Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника. |
4 |
ядро Это ядро для сканирования через изображение. |
5 |
якорь Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию. |
6 |
дельта Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0. |
7 |
BORDER_DEFAULT Мы допустим это значение по умолчанию. |
ЦСИ
Это исходное изображение.
ДСТ
Это изображение назначения.
глубина
Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника.
ядро
Это ядро для сканирования через изображение.
якорь
Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию.
дельта
Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0.
BORDER_DEFAULT
Мы допустим это значение по умолчанию.
Помимо метода filter2D, есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для применения оператора Prewitt к изображению в градациях серого.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Это оригинальное изображение свернуто с оператором Prewitt вертикальных краев, как показано ниже —
Вертикальное направление
-1 | 0 | 1 |
-1 | 0 | 1 |
-1 | 0 | 1 |
Свернутое изображение (вертикальное направление)
Это оригинальное изображение также было свернуто с оператором Prewitt горизонтальных краев, который приведен ниже —
Горизонтальное направление
-1 | -1 | -1 |
0 | 0 | 0 |
1 | 1 | 1 |
Свернутое изображение (горизонтальное направление)
Java DIP — Оператор Собель
Оператор Собеля очень похож на оператора Prewitt. Она также является производной маской и используется для обнаружения края. Оператор Собеля используется для обнаружения двух видов ребер в изображении: ребер в вертикальном направлении и ребер в горизонтальном направлении.
Мы собираемся использовать функцию OpenCV filter2D, чтобы применить оператор Собеля к изображениям. Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Аргументы функции описаны ниже —
Sr.No. | аргументация |
---|---|
1 |
ЦСИ Это исходное изображение. |
2 |
ДСТ Это изображение назначения. |
3 |
глубина Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника. |
4 |
ядро Это ядро для сканирования через изображение. |
5 |
якорь Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию. |
6 |
дельта Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0. |
7 |
BORDER_DEFAULT Мы допустим это значение по умолчанию. |
ЦСИ
Это исходное изображение.
ДСТ
Это изображение назначения.
глубина
Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника.
ядро
Это ядро для сканирования через изображение.
якорь
Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию.
дельта
Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0.
BORDER_DEFAULT
Мы допустим это значение по умолчанию.
Помимо метода filter2D, есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для применения оператора Sobel к изображению в градациях серого.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Это оригинальное изображение свернуто с оператором Собеля по вертикальным краям, который приведен ниже —
Вертикальное направление
-1 | 0 | 1 |
-2 | 0 | 2 |
-1 | 0 | 1 |
Свернутое изображение (вертикальное направление)
Этот оригинал свернут с оператором Собеля горизонтальных ребер, который приведен ниже —
Горизонтальное направление
-1 | -2 | -1 |
0 | 0 | 0 |
1 | 2 | 1 |
Свернутое изображение (горизонтальное направление)
Java DIP — оператор Кирша
Маски компаса Кирша являются еще одним типом производных масок, которые используются для обнаружения краев. Этот оператор также известен как маска направления. В этом операторе мы берем одну маску и поворачиваем ее во всех восьми направлениях компаса, чтобы получить ребра восьми направлений.
Мы собираемся использовать функцию OpenCV filter2D, чтобы применить оператор Кирша к изображениям. Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Аргументы функции описаны ниже —
Sr.No. | аргументация |
---|---|
1 |
ЦСИ Это исходное изображение. |
2 |
ДСТ Это изображение назначения. |
3 |
глубина Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника. |
4 |
ядро Это ядро для сканирования через изображение. |
5 |
якорь Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию. |
6 |
дельта Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0. |
7 |
BORDER_DEFAULT Мы допустим это значение по умолчанию. |
ЦСИ
Это исходное изображение.
ДСТ
Это изображение назначения.
глубина
Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника.
ядро
Это ядро для сканирования через изображение.
якорь
Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию.
дельта
Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0.
BORDER_DEFAULT
Мы допустим это значение по умолчанию.
Помимо метода filter2D (), есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для применения оператора Кирша к изображению в градациях серого.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Это оригинальное изображение свернуто с оператором Кирша Восточных краев, который, как показано ниже —
Кирш Восток
-3 | -3 | -3 |
-3 | 0 | -3 |
5 | 5 | 5 |
Свернутое изображение (Кирш Восток)
Это оригинальное изображение свернуто с оператором Кирша юго-западных краев, который, как показано ниже —
Кирш Юго-Запад
5 | 5 | -3 |
5 | 0 | -3 |
-3 | -3 | -3 |
Свернутое изображение (Кирш Юго-Запад)
Java DIP — оператор Робинсона
Маски компаса Робинсона являются еще одним типом производных масок, которые используются для обнаружения краев. Этот оператор также известен как маска направления. В этом операторе мы берем одну маску и поворачиваем ее во всех восьми основных направлениях, чтобы получить края восьми направлений.
Мы собираемся использовать функцию OpenCV filter2D для применения оператора Робинсона к изображениям. Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Аргументы функции описаны ниже —
Sr.No. | Аргумент и описание |
---|---|
1 |
ЦСИ Это исходное изображение. |
2 |
ДСТ Это изображение назначения. |
3 |
глубина Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника. |
4 |
ядро Это ядро для сканирования через изображение. |
5 |
якорь Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию. |
6 |
дельта Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0. |
7 |
BORDER_DEFAULT Мы допустим это значение по умолчанию. |
ЦСИ
Это исходное изображение.
ДСТ
Это изображение назначения.
глубина
Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника.
ядро
Это ядро для сканирования через изображение.
якорь
Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию.
дельта
Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0.
BORDER_DEFAULT
Мы допустим это значение по умолчанию.
Помимо метода filter2D, есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для применения оператора Робинсона к изображению в градациях серого.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Это оригинальное изображение свернуто с оператором Робинсона северных краев, как показано ниже —
Маска северного направления
-1 | 0 | 1 |
-2 | 0 | 2 |
-1 | 0 | 1 |
Свернутое изображение (Робинсон Норт)
Это оригинальное изображение было также свернуто с оператором Робинсона Восточных краев, как показано ниже —
Восточная маска направления
-1 | -2 | -1 |
0 | 0 | 0 |
1 | 2 | 1 |
Свернутое изображение (Robinson East)
Java DIP — Лапласский оператор
Оператор Лапласа также является производным оператором, который используется для поиска ребер в изображении. Основное различие между лапласианом и другими операторами, такими как Prewitt, Sobel, Robinson и Kirsch, заключается в том, что все они являются производными масками первого порядка, а Laplacian — производными масками второго порядка.
Мы используем функцию OpenCV filter2D для применения оператора Лапласа к изображениям. Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Аргументы функции описаны ниже —
Sr.No. | аргументы |
---|---|
1 |
ЦСИ Это исходное изображение. |
2 |
ДСТ Это изображение назначения. |
3 |
глубина Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника. |
4 |
ядро Это ядро для сканирования через изображение. |
5 |
якорь Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию. |
6 |
дельта Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0. |
7 |
BORDER_DEFAULT Мы допустим это значение по умолчанию. |
ЦСИ
Это исходное изображение.
ДСТ
Это изображение назначения.
глубина
Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника.
ядро
Это ядро для сканирования через изображение.
якорь
Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию.
дельта
Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0.
BORDER_DEFAULT
Мы допустим это значение по умолчанию.
Помимо метода filter2D (), есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для применения оператора Лапласа к изображению в градациях серого.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Это оригинальное изображение свернуто с оператором Лапласа Негатива, как показано ниже —
Лапласовский Отрицательный
0 | -1 | 0 |
-1 | 4 | -1 |
0 | -1 | 0 |
Свернутое изображение (Лапласово негатив)
Это оригинальное изображение свернуто с положительным оператором Лапласа, как показано ниже —
Лапласиан положительный
0 | 1 | 0 |
1 | -4 | 1 |
0 | 1 | 0 |
Свернутое изображение (Laplacian Positive)
Java DIP — Средневзвешенный фильтр
В средневзвешенном фильтре мы придавали больший вес значению центра, благодаря чему вклад центра становится больше, чем остальные значения. Благодаря средневзвешенной фильтрации мы можем контролировать размытие изображения.
Мы используем функцию OpenCV filter2D, чтобы применить средневзвешенный фильтр к изображениям. Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
filter2D(src, dst, depth , kernel, anchor, delta, BORDER_DEFAULT );
Аргументы функции описаны ниже —
Sr.No. | Аргумент и описание |
---|---|
1 |
ЦСИ Это исходное изображение. |
2 |
ДСТ Это изображение назначения. |
3 |
ddepth Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника. |
4 |
ядро Это ядро для сканирования через изображение. |
5 |
якорь Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию. |
6 |
дельта Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0. |
7 |
BORDER_DEFAULT Мы допустим это значение по умолчанию. |
ЦСИ
Это исходное изображение.
ДСТ
Это изображение назначения.
ddepth
Это глубина дст. Отрицательное значение (например, -1) указывает, что глубина такая же, как у источника.
ядро
Это ядро для сканирования через изображение.
якорь
Это позиция якоря относительно его ядра. Местоположение Точка (-1, -1) указывает центр по умолчанию.
дельта
Это значение, которое будет добавлено к каждому пикселю во время свертки. По умолчанию это 0.
BORDER_DEFAULT
Мы допустим это значение по умолчанию.
Помимо метода filter2D (), есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для применения фильтра средневзвешенного значения к изображению Graycale.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Это оригинальное изображение свернуто с фильтром взвешенного среднего, как показано ниже —
Средневзвешенный фильтр
1 | 1 | 1 |
1 | 10 | 1 |
1 | 1 | 1 |
Свернутое изображение
Java DIP — Создать эффект масштабирования
Масштабирование — это процесс увеличения изображения, чтобы детали на изображении стали более заметными и заметными.
Мы используем функцию изменения размера OpenCV, чтобы применить масштабирование к изображениям. Его можно найти в пакете Imgproc . Его синтаксис приведен ниже —
Imgproc.resize(source,destination, destination.size(),zoomFactor,zoomFactor,Interpolation);
В функции изменения размера мы передаем исходное изображение, конечное изображение и его размер, коэффициент масштабирования и используемый метод интерполяции.
Доступные методы интерполяции описаны ниже —
Sr.No. | Метод интерполяции и описание |
---|---|
1 |
INTER_NEAREST Это интерполяция ближайшего соседа. |
2 |
INTER_LINEAR Это билинейная интерполяция (используется по умолчанию). |
3 |
INTER_AREA Это повторная выборка с использованием отношения площади пикселя. Это может быть предпочтительным методом для прореживания изображения, поскольку он дает более свободные результаты. |
4 |
INTER_CUBIC Это бикубическая интерполяция в окрестности 4×4 пикселей. |
5 |
INTER_LANCZOS4 Это интерполяция Ланцоша в окрестности 8×8 пикселей. |
INTER_NEAREST
Это интерполяция ближайшего соседа.
INTER_LINEAR
Это билинейная интерполяция (используется по умолчанию).
INTER_AREA
Это повторная выборка с использованием отношения площади пикселя. Это может быть предпочтительным методом для прореживания изображения, поскольку он дает более свободные результаты.
INTER_CUBIC
Это бикубическая интерполяция в окрестности 4×4 пикселей.
INTER_LANCZOS4
Это интерполяция Ланцоша в окрестности 8×8 пикселей.
Помимо метода resize, есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int ddepth, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int ddepth, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для применения масштабирования к изображению.
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()); } } }
Выход
Когда вы выполняете данный код, вы увидите следующий вывод:
Исходное изображение
Увеличенное изображение (коэффициент масштабирования — 2)
Java DIP — библиотеки с открытым исходным кодом
В этой главе мы рассмотрим некоторые из бесплатных библиотек обработки изображений, которые широко используются и могут быть легко интегрированы в проект. Эти библиотеки включают в себя —
- ImageJ
- Фиджи
- Commons Imaging
- ImageMagick
- Endrov
- LeadTools
- OpenCV
ImageJ
ImageJ — это общедоступная программа обработки изображений Java, созданная по мотивам NIH Image для Macintosh. Он может отображать, редактировать, анализировать, обрабатывать, сохранять и печатать 8-битные, 16-битные и 32-битные изображения.
Некоторые из основных функций ImageJ описаны ниже —
Sr.No. | Характеристика и описание |
---|---|
1 |
Работает везде ImageJ написан на Java, что позволяет ему работать в Linux, Mac OS X и Windows, как в 32-битном, так и в 64-битном режимах. |
2 |
Открытый исходный код ImageJ и его исходный код Java находятся в свободном доступе и в свободном доступе. |
3 |
Инструментарий Используйте ImageJ в качестве инструментария обработки изображений (библиотеки классов) для разработки апплетов, сервлетов или приложений. |
4 |
Типы данных 8-разрядный оттенки серого или индексированный цвет, 16-разрядное целое число без знака, 32-разрядное число с плавающей точкой и цвет RGB. |
5 |
Форматы файлов Откройте и сохраните GIF, JPEG, BMP, PNG, PGM, FITS и ASCII. Откройте DICOM. Открывайте TIFF, GIF, JPEG, DICOM и необработанные данные, используя URL. |
6 |
Выбор Создайте прямоугольные, эллиптические или неправильные выделения области. Создайте выбор линий и точек. |
7 |
Улучшение изображения Поддерживает сглаживание, резкость, обнаружение краев, медианную фильтрацию и пороговое значение как для 8-битных изображений в градациях серого, так и для цветных изображений RGB. |
8 |
Обработка цвета Разделите 32-битное цветное изображение на компоненты RGB или HSV. Слияние 8-битных компонентов в цветное изображение. |
Работает везде
ImageJ написан на Java, что позволяет ему работать в Linux, Mac OS X и Windows, как в 32-битном, так и в 64-битном режимах.
Открытый исходный код
ImageJ и его исходный код Java находятся в свободном доступе и в свободном доступе.
Инструментарий
Используйте ImageJ в качестве инструментария обработки изображений (библиотеки классов) для разработки апплетов, сервлетов или приложений.
Типы данных
8-разрядный оттенки серого или индексированный цвет, 16-разрядное целое число без знака, 32-разрядное число с плавающей точкой и цвет RGB.
Форматы файлов
Откройте и сохраните GIF, JPEG, BMP, PNG, PGM, FITS и ASCII. Откройте DICOM. Открывайте TIFF, GIF, JPEG, DICOM и необработанные данные, используя URL.
Выбор
Создайте прямоугольные, эллиптические или неправильные выделения области. Создайте выбор линий и точек.
Улучшение изображения
Поддерживает сглаживание, резкость, обнаружение краев, медианную фильтрацию и пороговое значение как для 8-битных изображений в градациях серого, так и для цветных изображений RGB.
Обработка цвета
Разделите 32-битное цветное изображение на компоненты RGB или HSV. Слияние 8-битных компонентов в цветное изображение.
Фиджи
Фиджи — это пакет для обработки изображений. Это можно описать как распределение ImageJ (и ImageJ2) вместе с Java, Java3D и множеством плагинов, организованных в единую структуру меню. Фиджи сравнивает с ImageJ, как Ubuntu сравнивает с Linux.
Помимо основных функций ImageJ, некоторые из расширенных функций Фиджи описаны ниже —
Sr.No. | Характеристика и описание |
---|---|
1 |
Регистрация 3D-изображений Это включает в себя эластичное выравнивание и монтаж, извлечение элементов, стабилизатор изображения и т. Д. |
2 |
Сегментирование изображений Предлагает более 35 видов сегментации. |
3 |
Полезные сочетания клавиш У Фуджи много сочетаний клавиш. |
4 |
Scripting Разрешить создание сценариев с помощью макросов в JavaScript, JRuby, Jython, Clojure и Beanshell. |
5 |
Разработка плагинов Используйте Script Editor, чтобы начать разработку плагинов, а затем запустите плагины. |
6 |
Трюки ImageJ ImageJ прост в использовании, но иногда вы хотите какую-то функцию, которая на самом деле реализована, но вы не знаете, как запустить. |
Регистрация 3D-изображений
Это включает в себя эластичное выравнивание и монтаж, извлечение элементов, стабилизатор изображения и т. Д.
Сегментирование изображений
Предлагает более 35 видов сегментации.
Полезные сочетания клавиш
У Фуджи много сочетаний клавиш.
Scripting
Разрешить создание сценариев с помощью макросов в JavaScript, JRuby, Jython, Clojure и Beanshell.
Разработка плагинов
Используйте Script Editor, чтобы начать разработку плагинов, а затем запустите плагины.
Трюки ImageJ
ImageJ прост в использовании, но иногда вы хотите какую-то функцию, которая на самом деле реализована, но вы не знаете, как запустить.
Commons Imaging
Apache Commons Imaging, ранее известная как Apache Commons Sanselan, — это библиотека, которая считывает и записывает различные форматы изображений, включая быстрый анализ информации об изображении, такой как (размер, цвет, пространство, профиль ICC и т. Д.) И метаданных.
Некоторые из основных функций ImageJ описаны ниже —
Sr.No. | Характеристика и описание |
---|---|
1 |
Джава Apache Commons Imaging написан на 100% чистой Java. Он выполняется на любой JVM и любой платформе без изменений. |
2 |
Форматы изображений Он читает и записывает широкий спектр форматов изображений и поддерживает некоторые варианты и кодировки, пропущенные всеми или большинством других библиотек. |
3 |
Поддержка метаданных Он поддерживает чтение и запись различных метаданных в структурированном виде, включая метаданные EXIF. |
4 |
Сеть дружественная Это для сети. Commons Imaging считывает только те данные, которые ему нужны, и кэширует то, что читается, чтобы оно не было слишком загруженным в сети. |
5 |
Легко использовать Он разработан, чтобы быть очень простым в использовании. У него простой, чистый интерфейс. Большинство операций — это вызовы одного метода обработки изображений. |
6 |
прозрачный Commons Imaging стремится быть прозрачным. Здесь нет скрытых буферов для удаления, нет свободной памяти, нет фоновых потоков. |
7 |
Открытый исходный код Это свободное программное обеспечение / с открытым исходным кодом. Он доступен под лицензией Apache Software License. |
8 |
Преобразования цветов Класс ColorConversions предлагает методы для преобразования между следующими цветовыми пространствами — CIE-L * CH, CIE-L * ab, CIE-L * uv, CMY, CMYK, HSL, HSV, Hunter-Lab, RGB, XYZ и YXY. |
Джава
Apache Commons Imaging написан на 100% чистой Java. Он выполняется на любой JVM и любой платформе без изменений.
Форматы изображений
Он читает и записывает широкий спектр форматов изображений и поддерживает некоторые варианты и кодировки, пропущенные всеми или большинством других библиотек.
Поддержка метаданных
Он поддерживает чтение и запись различных метаданных в структурированном виде, включая метаданные EXIF.
Сеть дружественная
Это для сети. Commons Imaging считывает только те данные, которые ему нужны, и кэширует то, что читается, чтобы оно не было слишком загруженным в сети.
Легко использовать
Он разработан, чтобы быть очень простым в использовании. У него простой, чистый интерфейс. Большинство операций — это вызовы одного метода обработки изображений.
прозрачный
Commons Imaging стремится быть прозрачным. Здесь нет скрытых буферов для удаления, нет свободной памяти, нет фоновых потоков.
Открытый исходный код
Это свободное программное обеспечение / с открытым исходным кодом. Он доступен под лицензией Apache Software License.
Преобразования цветов
Класс ColorConversions предлагает методы для преобразования между следующими цветовыми пространствами — CIE-L * CH, CIE-L * ab, CIE-L * uv, CMY, CMYK, HSL, HSV, Hunter-Lab, RGB, XYZ и YXY.
ImageMagick
ImageMagick — это программный пакет для создания, редактирования, создания или преобразования растровых изображений. Он может читать и записывать изображения в более чем 100 форматах, включая DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PNG, Postscript, SVG и TIFF. Используйте ImageMagick для изменения размера, зеркального отражения, поворота, поворота, искажения, сдвига и преобразования изображений, настройки цветов изображения, применения различных специальных эффектов или рисования текста, линий, многоугольников, эллипсов и кривой Безье.
Некоторые из основных функций ImageMagick описаны ниже —
Sr.No. | Характеристика и описание |
---|---|
1 |
Преобразование формата Он преобразует изображение из одного формата в другой (например, PNG в JPEG). |
2 |
преобразование Он может изменить размер, повернуть, обрезать, перевернуть или обрезать изображение. |
3 |
прозрачность Это делает части изображения невидимыми. |
4 |
Рисовать Это добавляет формы или текст к изображению. |
5 |
декорировать Это добавляет границу или рамку к изображению. |
6 |
Спецэффекты Это может размыть, резкость, порог или тонировать изображение. |
7 |
Анимация Он может создать анимационную последовательность GIF из группы изображений. |
8 |
композитный Это может перекрывать одно изображение над другим. |
9 |
Морфология форм Он извлекает особенности, описывает формы и распознает узоры на изображениях. |
10 |
Зашифровать или расшифровать изображение Он преобразует обычные изображения в непонятную тарабарщину и обратно. |
Преобразование формата
Он преобразует изображение из одного формата в другой (например, PNG в JPEG).
преобразование
Он может изменить размер, повернуть, обрезать, перевернуть или обрезать изображение.
прозрачность
Это делает части изображения невидимыми.
Рисовать
Это добавляет формы или текст к изображению.
декорировать
Это добавляет границу или рамку к изображению.
Спецэффекты
Это может размыть, резкость, порог или тонировать изображение.
Анимация
Он может создать анимационную последовательность GIF из группы изображений.
композитный
Это может перекрывать одно изображение над другим.
Морфология форм
Он извлекает особенности, описывает формы и распознает узоры на изображениях.
Зашифровать или расшифровать изображение
Он преобразует обычные изображения в непонятную тарабарщину и обратно.
Endrov
Endrov — это многоцелевая программа для анализа изображений. Он написан независимо и предназначен для устранения многих недостатков других бесплатных программ и многих коммерческих пакетов.
Некоторые из основных особенностей Endrov описаны ниже —
Sr.No. | Характеристика и описание |
---|---|
1 |
Просмотр данных Он просматривает данные, в 2D и 3D. Предназначен для обработки сложных 4D-схем передачи данных и неограниченного количества каналов, где каждый канал может иметь свое собственное разрешение X, Y и Z. |
2 |
Аннотируйте свои изображения Он аннотирует ваши изображения, автоматически или вручную, чтобы понять их и получить статистику. |
3 |
Отменить и повторить Это может отменить и повторить для всех операций. |
4 |
Ленивая оценка Он разработан с нуля для обработки больших наборов изображений. Эндров использует ленивый анализ, который в основном доступен в исследовательских языках программирования. |
5 |
Язык сценариев Он поддерживает графический язык сценариев, а также традиционные сценарии. |
6 |
Джава Написано на Java. Архитектура плагинов позволяет легко расширять с помощью новых плагинов Java. Может взаимодействовать с Matlab. |
7 |
Форматы Он получает доступ почти ко всем коммерческим и открытым форматам файлов, используя Bio-форматы. |
8 |
Микроскопическая обработка Он может контролировать все ваши микроскопы с помощью одной программы и выполнять анализ изображений на лету. |
Просмотр данных
Он просматривает данные, в 2D и 3D. Предназначен для обработки сложных 4D-схем передачи данных и неограниченного количества каналов, где каждый канал может иметь свое собственное разрешение X, Y и Z.
Аннотируйте свои изображения
Он аннотирует ваши изображения, автоматически или вручную, чтобы понять их и получить статистику.
Отменить и повторить
Это может отменить и повторить для всех операций.
Ленивая оценка
Он разработан с нуля для обработки больших наборов изображений. Эндров использует ленивый анализ, который в основном доступен в исследовательских языках программирования.
Язык сценариев
Он поддерживает графический язык сценариев, а также традиционные сценарии.
Джава
Написано на Java. Архитектура плагинов позволяет легко расширять с помощью новых плагинов Java. Может взаимодействовать с Matlab.
Форматы
Он получает доступ почти ко всем коммерческим и открытым форматам файлов, используя Bio-форматы.
Микроскопическая обработка
Он может контролировать все ваши микроскопы с помощью одной программы и выполнять анализ изображений на лету.
LEADTOOLS
LEADTOOLS обеспечивает более 200 функций обработки изображений в нескольких категориях, включая очистку документов, улучшение медицинских изображений, преобразование и коррекцию цвета, уменьшение шума, обнаружение краев и многое другое.
Некоторые из основных функций LEADTOOLS описаны ниже —
Sr.No. | Характеристика и описание |
---|---|
1 |
Обработка изображения отсканированного документа Этот мощный набор функций может считывать отсканированные документы с артефактами и дефектами, такими как пробитые отверстия, наклонные углы, границы, пылинки и многое другое. |
2 |
Обработка медицинских изображений Улучшите изображение или выделите детали, сдвигая, выбирая, вычитая и удаляя фон для лучшей визуализации. |
3 |
Геометрическая трансформация Эти функции можно использовать для очистки, выравнивания, исправления изображений или применения художественных 3D-эффектов. |
4 |
Яркость и контрастность Эти функции могут использоваться для улучшения изображений, применения художественных эффектов или помощи в диагностической оценке медицинских изображений. |
5 |
Преобразование цветового пространства Они могут добавить функциональность цветового пространства изображения в однопоточные и многопоточные приложения, включая приложения, размещенные на IIS и Windows WF. |
6 |
Коррекция цвета Эти функции используются для коррекции изображений с помощью замененных цветовых каналов, балансировки интенсивности цветов или выполнения различных задач анализа изображений. |
7 |
Улучшение изображения Эти функции используются для исправления распространенных ошибок в фотографии, таких как эффект красных глаз и несбалансированные цвета, а также для помощи в диагностической оценке медицинских изображений. |
8 |
Область интересов Эти функции используются для создания и изменения интересующих областей на изображениях для выполнения функций обработки изображений на определенных участках изображения, экономии времени в штрих-коде и распознавания OCR или выполнения различных задач анализа изображений. |
Обработка изображения отсканированного документа
Этот мощный набор функций может считывать отсканированные документы с артефактами и дефектами, такими как пробитые отверстия, наклонные углы, границы, пылинки и многое другое.
Обработка медицинских изображений
Улучшите изображение или выделите детали, сдвигая, выбирая, вычитая и удаляя фон для лучшей визуализации.
Геометрическая трансформация
Эти функции можно использовать для очистки, выравнивания, исправления изображений или применения художественных 3D-эффектов.
Яркость и контрастность
Эти функции могут использоваться для улучшения изображений, применения художественных эффектов или помощи в диагностической оценке медицинских изображений.
Преобразование цветового пространства
Они могут добавить функциональность цветового пространства изображения в однопоточные и многопоточные приложения, включая приложения, размещенные на IIS и Windows WF.
Коррекция цвета
Эти функции используются для коррекции изображений с помощью замененных цветовых каналов, балансировки интенсивности цветов или выполнения различных задач анализа изображений.
Улучшение изображения
Эти функции используются для исправления распространенных ошибок в фотографии, таких как эффект красных глаз и несбалансированные цвета, а также для помощи в диагностической оценке медицинских изображений.
Область интересов
Эти функции используются для создания и изменения интересующих областей на изображениях для выполнения функций обработки изображений на определенных участках изображения, экономии времени в штрих-коде и распознавания OCR или выполнения различных задач анализа изображений.
OpenCV
OpenCV выпущен под лицензией BSD и, следовательно, он бесплатен для академического и коммерческого использования. Он имеет интерфейсы C ++, C, Python и Java и поддерживает Windows, Linux, Mac OS, iOS и Android. OpenCV был разработан для вычислительной эффективности и с сильным акцентом на приложениях реального времени. Написанная на оптимизированном C / C ++, библиотека может использовать преимущества многоядерной обработки.
Некоторые основные функции OpenCV описаны кратко —
Sr.No. | Характеристика и описание |
---|---|
1 |
Сглаживание изображений Это включает применение Blur, GaussianBlur, medianBlur и двустороннего фильтра. |
2 |
Размывание и расширение Он может применять два очень распространенных оператора морфологии — Дилатация и Эрозия. |
3 |
Морфология Преобразования Функция OpenCV morphologyEx для применения морфологических преобразований, таких как открытие, закрытие, TopHat, BlackHat и т. Д. |
4 |
Изображение Пирамиды OpenCV работает с функциями pyrUp и pyrDown, чтобы уменьшить или увеличить выборку данного изображения. |
4 |
Основные операции с порогом Выполните основные операции порогового значения, используя порог функции OpenCV. |
5 |
Добавление границ к вашим изображениям Функция OpenCV copyMakeBorder используется для установки границ (дополнительное заполнение вашего изображения). |
7 |
Переназначение В OpenCV функция remap предлагает простую реализацию переназначения. |
8 |
Расчет гистограммы Для простых целей в OpenCV реализована функция calcHist, которая вычисляет гистограмму набора массивов (обычно изображений или плоскостей изображений). Он может работать с 32 размерами. |
Сглаживание изображений
Это включает применение Blur, GaussianBlur, medianBlur и двустороннего фильтра.
Размывание и расширение
Он может применять два очень распространенных оператора морфологии — Дилатация и Эрозия.
Морфология Преобразования
Функция OpenCV morphologyEx для применения морфологических преобразований, таких как открытие, закрытие, TopHat, BlackHat и т. Д.
Изображение Пирамиды
OpenCV работает с функциями pyrUp и pyrDown, чтобы уменьшить или увеличить выборку данного изображения.
Основные операции с порогом
Выполните основные операции порогового значения, используя порог функции OpenCV.
Добавление границ к вашим изображениям
Функция OpenCV copyMakeBorder используется для установки границ (дополнительное заполнение вашего изображения).
Переназначение
В OpenCV функция remap предлагает простую реализацию переназначения.
Расчет гистограммы
Для простых целей в OpenCV реализована функция calcHist, которая вычисляет гистограмму набора массивов (обычно изображений или плоскостей изображений). Он может работать с 32 размерами.
Java DIP — Введение в OpenCV
OpenCV выпущен под лицензией BSD и, следовательно, он бесплатен для академического и коммерческого использования. Он имеет интерфейсы C ++, C, Python и Java и поддерживает Windows, Linux, Mac OS, iOS и Android.
OpenCV был разработан для вычислительной эффективности и с сильным акцентом на приложениях реального времени. Написанная на оптимизированном C / C ++, библиотека может использовать преимущества многоядерной обработки.
Некоторые из основных функций OpenCV описаны ниже —
Sr.No. | Характеристика и описание |
---|---|
1 |
Сглаживание изображений Это включает применение Blur, GaussianBlur, medianBlur и двустороннего фильтра. |
2 |
Размывание и расширение Он может применять два очень распространенных оператора морфологии — Дилатация и Эрозия. |
3 |
Морфология Преобразования Функция OpenCV morphologyEx для применения морфологических преобразований, таких как открытие, закрытие, TopHat, BlackHat и т. Д. |
4 |
Изображение Пирамиды OpenCV работает с функциями pyrUp и pyrDown, чтобы уменьшить или увеличить выборку данного изображения. |
4 |
Основные операции с порогом Он может выполнять основные операции порогового значения, используя порог функции OpenCV. |
5 |
Добавление границ к вашим изображениям Функция OpenCV copyMakeBorder используется для установки границ (дополнительное заполнение вашего изображения). |
7 |
Переназначение В OpenCV функция remap предлагает простую реализацию переназначения. |
8 |
Расчет гистограммы Для простых целей в OpenCV реализована функция calcHist, которая вычисляет гистограмму набора массивов (обычно изображений или плоскостей изображений). Он может работать с 32 размерами. |
Сглаживание изображений
Это включает применение Blur, GaussianBlur, medianBlur и двустороннего фильтра.
Размывание и расширение
Он может применять два очень распространенных оператора морфологии — Дилатация и Эрозия.
Морфология Преобразования
Функция OpenCV morphologyEx для применения морфологических преобразований, таких как открытие, закрытие, TopHat, BlackHat и т. Д.
Изображение Пирамиды
OpenCV работает с функциями pyrUp и pyrDown, чтобы уменьшить или увеличить выборку данного изображения.
Основные операции с порогом
Он может выполнять основные операции порогового значения, используя порог функции OpenCV.
Добавление границ к вашим изображениям
Функция OpenCV copyMakeBorder используется для установки границ (дополнительное заполнение вашего изображения).
Переназначение
В OpenCV функция remap предлагает простую реализацию переназначения.
Расчет гистограммы
Для простых целей в OpenCV реализована функция calcHist, которая вычисляет гистограмму набора массивов (обычно изображений или плоскостей изображений). Он может работать с 32 размерами.
Интеграция OpenCV
Следующие шаги объясняют, как интегрировать OpenCV в ваши приложения.
Скачать OpenCV
Вы можете скачать OpenCV с их официального сайта здесь .
Создать пользовательскую библиотеку
Кроме того, мы создаем пользовательскую библиотеку OpenCV, чтобы мы могли использовать ее в качестве будущего проекта.
Запустить Затмение
Выберите Window -> Preferences из меню.
Перейдите под Java -> Путь сборки -> Пользовательские библиотеки и нажмите New.
Теперь введите имя для вашей библиотеки. Например, OpenCV-2.4.6.
После этого выберите вашу новую пользовательскую библиотеку (т.е. OpenCV-2.4.6) и нажмите Add External JAR.
Просмотрите C: \ OpenCV-2.4.6 \ build \ java \ и выберите opencv-246.jar. После добавления jar раскройте файл opencv-246.jar, выберите расположение библиотеки Native и нажмите Edit.
Выберите «Внешняя папка …» и найдите папку C: \ OpenCV-2.4.6 \ build \ java \ x64. Если у вас 32-битная система, вам нужно выбрать папку x86 вместо x64.
Нажмите Ok, и все готово.
Теперь ваша пользовательская библиотека создана. Теперь вы можете повторно использовать эту конфигурацию в любом проекте.
Создать проект OpenCV
Создайте новый проект Java в Eclipse.
На шаге Параметры Java на вкладке Библиотеки выберите Добавить библиотеку … и выберите OpenCV-2.4.6, затем нажмите Готово.
Нажмите Готово, и все готово.
Java DIP — преобразование OpenCV GrayScale
Чтобы преобразовать цветное изображение в изображение в градациях серого с помощью OpenCV, мы читаем изображение в BufferedImage и преобразуем его в объект Mat . Его синтаксис приведен ниже —
File input = new File("digital_image_processing.jpg"); BufferedImage image = ImageIO.read(input); //convert Buffered Image to Mat.
Затем вы можете преобразовать изображение из RGB в формат Grayscale, используя метод cvtColor () в классе Imgproc . Его синтаксис приведен ниже —
Imgproc.cvtColor(source mat, destination mat1, Imgproc.COLOR_RGB2GRAY);
Метод cvtColor () принимает три параметра: матрицу исходного изображения, матрицу целевого изображения и тип преобразования цвета.
Помимо метода cvtColor, существуют другие методы, предоставляемые классом Imgproc. Они перечислены ниже —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int глубина, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для преобразования изображения в оттенки серого —
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()); } } }
Выход
Когда вы выполняете данный пример, он преобразует имя изображения digital_image_processing.jpg в его эквивалентное изображение в градациях серого и записывает его на жесткий диск с именем grayscale.jpg .
Исходное изображение
Изображение в градациях серого
Java DIP — преобразование цветового пространства OpenCV
Чтобы изменить цветовое пространство одного изображения на другое с помощью OpenCV, мы читаем изображение в BufferedImage и конвертируем его в объект Mat . Его синтаксис приведен ниже —
File input = new File("digital_image_processing.jpg"); BufferedImage image = ImageIO.read(input); //convert Buffered Image to Mat.
OpenCv допускает много типов преобразования цветов, все из которых можно найти в классе Imgproc. Некоторые из типов описаны кратко —
Sr.No. | Тип преобразования цвета |
---|---|
1 | COLOR_RGB2BGR |
2 | COLOR_RGB2BGRA |
3 | COLOR_RGB2GRAY |
4 | COLOR_RGB2HLS |
5 | COLOR_RGB2HSV |
6 | COLOR_RGB2Luv |
7 | COLOR_RGB2YUV |
8 | COLOR_RGB2Lab |
Из любого типа преобразования цвета просто передайте соответствующий метод в метод cvtColor () класса Imgproc . Его синтаксис приведен ниже —
Imgproc.cvtColor(source mat, destination mat1, Color_Conversion_Code);
Метод cvtColor () принимает три параметра: матрицу исходного изображения, матрицу целевого изображения и тип преобразования цвета.
Помимо метода cvtColor (), есть и другие методы, предоставляемые классом Imgproc. Они описаны кратко —
Sr.No. | Метод и описание |
---|---|
1 |
cvtColor (Mat src, Mat dst, int code, int dstCn) Он преобразует изображение из одного цветового пространства в другое. |
2 |
дилат (Mat src, Mat dst, Mat kernel) Это расширяет изображение с помощью определенного структурирующего элемента. |
3 |
equizeHist (Mat src, Mat dst) Он выравнивает гистограмму изображения в градациях серого. |
4 |
filter2D (Mat src, Mat dst, int ddepth, ядро Mat, точка привязки, двойная дельта) Это сворачивает изображение с ядром. |
5 |
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX) Размытие изображения с использованием фильтра Гаусса. |
6 |
интеграл (Mat src, Mat sum) Он рассчитывает интеграл изображения. |
cvtColor (Mat src, Mat dst, int code, int dstCn)
Он преобразует изображение из одного цветового пространства в другое.
дилат (Mat src, Mat dst, Mat kernel)
Это расширяет изображение с помощью определенного структурирующего элемента.
equizeHist (Mat src, Mat dst)
Он выравнивает гистограмму изображения в градациях серого.
filter2D (Mat src, Mat dst, int ddepth, ядро Mat, точка привязки, двойная дельта)
Это сворачивает изображение с ядром.
GaussianBlur (Mat src, Mat dst, Размер ksize, двойной сигмаX)
Размытие изображения с использованием фильтра Гаусса.
интеграл (Mat src, Mat sum)
Он рассчитывает интеграл изображения.
пример
В следующем примере демонстрируется использование класса Imgproc для преобразования изображения из одного цветового пространства в другое.
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()); } } }
Выход
Когда вы выполняете данный пример, он преобразует имя изображения digital_image_processing.jpg в его эквивалентное изображение цветового пространства HSV и записывает его на жесткий диск с именем hsv.jpg .