Гауссовый размытие
Гауссовый Blur, также известный как сглаживание Гаусса, представляет собой эффект обработки, широко используемый в программном обеспечении обработки изображений, таком как Adobe Photoshop, Gimp и Paint.net. Обычно он используется для снижения шума изображения и снижения уровня детализации. Визуальный эффект изображения, сгенерированного этой технологией размытия, похож на наблюдение за изображением с помощью полупрозрачного экрана, который значительно отличается от эффекта визуализации линзы вне фокусировки и обычных световых тени. Гауссовое сглаживание также используется в фазах предварительной обработки в алгоритмах компьютерного зрения, чтобы улучшить эффекты изображений изображений в разных масштабах. С математической точки зрения процесс размытия гауссового размытия - это свертка с нормальным распределением. Поскольку нормальное распределение также называется гауссовым распределением, эта технология называется гауссовой нечеткой. Стильница изображения и круглого квадратного размытия генерируют более точный эффект визуализации вне фокуса. Поскольку преобразование Фурье гауссовой функции является еще одной гауссовой функцией, Гауссовый Blur является фильтром низкого уровня для изображения.
Гауссовый Fuzzing использует нормальную функцию плотности распределения Гауссана для расчета преобразования каждого пикселя в изображении.
Основываясь на одномерной гауссовой функции, может быть получена двумерная гауссовая функция:
где r - нечеткий радиус, r^2 = x^2 + y^2, а σ - стандартное отклонение нормального распределения. В двухмерном пространстве контурные линии поверхности, генерируемой этой формулой, представляют собой концентрические круги, которые обычно распределяются по центру. Матрица свертки, состоящая из пикселей с ненулевым распределением, преобразуется с исходным изображением. Значение каждого пикселя представляет собой средневзвешенное значение значений соседних пикселей вокруг. Значение исходного пикселя имеет наибольшее количество гауссовского распределения, поэтому он имеет самый большой вес. По мере того, как соседние пиксели становятся дальше и дальше от оригинального пикселя, их веса становятся меньше и меньше. Этот процесс пузырьки сохраняет эффекты края больше, чем другие нечеткие фильтры выравнивания.
На самом деле, легко внедрить гауссовый размытие на iOS. Уже в iOS 5.0 был основной API изображения, и в библиотеке Framework представлено большое количество реализаций фильтров.
+(Uiimage *) coreblurimage: (uiimage *) изображение withblurnumber: (cgfloat) blur {cicontext *context = [cicontext contextwithoptions: nil]; Ciimage *inputImage = [ciimage ImageWithCgimage: image.cgimage]; // Установить фильтр cifilter *filter = [cifilter filterWithName:@"cigaussianblur"]; [Filter setValue: inputImage forKey: kciinputImageKey]; [Filter setValue: @(blur) forkey: @"inputradius"]; // Blurimage ciimage *result = [filter valueforkey: kcioutputimagekey]; Cgimageref outimage = [context createcgimage: результат отректа: [результат протяженностью]]; Uiimage *blurimage = [uiimage imagewithcgimage: Outimage]; CgimagerElease (Outimage); вернуть BluRimage;}Вы также можете использовать Native API - renderscript для реализации Gaussian Blur на Android, но API Android выше 17, который является версией Android 4.2.
/** * Алгоритм для реализации гауссовского нечеткого использования с использованием renderscript * @param bitmap * @return */public bitmap blur (растровый растровый растровый цвет) {// Давайте создать пустую растровую карту с тем же размером растрового цвета, который мы хотим, чтобы bitrbitmap outbbitmap = bitmap.createbemap (bitmaphetheTherTherTHETHEMAP = BitmeTherTHETHETHETHETHETHETHETHETHETHEMAP = BitmapheTHETHETHETHEMAP () (). Bitmap.config.argb_8888); // создание нового renderscriptrenderscript rs = renderscript.create (getApplicationContext ()); // Создать внутренний размытый скрипт с использованием renderscriptScriptIntrinsicblur Blurscript = scriptIntrinsicbl.creat (rs, element. Распределения (в/в/out) с помощью renderscript и битмапсалокации allin = allocation.createfrombitmap (rs, bitmap); allocation allot = allocation.createfrombitmap (rs, Outbitmap); // установить радиус Blur: 0 <radius <= 25blurscript.setradius (20.0f); RenderscriptBlurscript.setInput (allin); blurscript.foreach (allout); // Скопировать окончательный растровый карту, созданный Outlocation to the outbitmapallout.copyto (outbitmap); // Утилизация оригинала Bitmapbitmap.recycle (); // после завершения всего, мы разрушаем renderscript.r.rs.r.Разработанный нами изображение CV4J также предоставляет фильтр для реализации гауссового размытия.
Gaussianblurfilter Filter = new Gaussianblurfilter (); filter.setsigma (10); rimatearatata.bitmap (растровый карта) .addfilter (фильтр) .into (image2);
Можно видеть, что гауссовый нечеткий, реализованный в CV4J, согласуется с эффектом реализации рендеров.
Среди них Кодекс Гауссанблурфильтера заключается в следующем:
public class GaussianBlurFilter implements CommonFilter {private float[] kernel;private double sigma = 2;ExecutorService mExecutor;CompletionService<Void> service;public GaussianBlurFilter() {kernel = new float[0];}public void setSigma(double a) {this.sigma = a;}@Override public ImageProcessor filter(final ImageProcessor src) {final int width = src.getwidth (); final int height = src.getheight (); final int size = width*height; int dims = src.getchannels (); makegusiankernel (sigma, 0,002, (int) math.min (ширина, высота); TaskUtils.newFixedThreadPool("cv4j",dims);service = new ExecutorCompletionService<>(mExecutor);// save resultfor (int i=0; i<dims; i++) {final int temp = i;service.submit(new Callable<Void>() {public Void call() throws Exception {byte[] inPixels = src.tobyte (temp); byte [] temp = new Byte [size]; blur (inpixels, temp, width, height); // h gaussianblur (temp, inpixels, высота, ширина); // v gaussainretur null;}});} для (int i = 0; i <dims; e) {e.printstacktrace ();}} mexecutor.shutdown (); return src;}/** * <p> Вот 1d гауссовый, </p> * * @param inpixels * @param outpixels * @param width * @param height */private blur (byte [] inpixels, byte -byte bytete byte byte byte byte byte byte byte byte byte byte byte byte byte byte byte byte byte byte byte byte byte byte with with * @param hight */private inpixels * @param inpixels. {int subcol = 0; int index = 0, index2 = 0; float sum = 0; int k = kernel.length -1; for (int row = 0; row <height; row ++) {int c = 0; index = row; for (int col = 0; col <width; col ++) {sum = 0; for (int m = -k; m <kernel. m; if (subcol <0 || subcol> = width) {subcol = 0;} index2 = row * width +subcol; c = inpixels [index2] & 0xff; sum += c * kernel [math.abs (m)];} outpixels [index] = (byte) инструменты. Makegaussiankernel (Final Double Sigma, окончательная двойная точность, int maxradius) {int kradius = (int) math.ceil (sigma*math.sqrt (-2*math.log (точность)))+1; если (maxradius <50) maxradius = 50; // Слишком маленький максимальный максимальный kradius = maxradius; kernel = new Float [kradius]; for (int i = 0; i <kradius; i ++) // Гауссовый функционал [i] = (float) (math.exp (-0,5*i*i/sigma/sigma); двойная сумма; // сумма над всем ядро [0]; для (int i = 1; i <kradius; i ++) sum+= 2*kernel [i];} else sum = sigma*math.sqrt (2*math.pi); for (int i = 0; i <kradius; i ++) {double v = (kernel [i]/sum); kernel [i] = (float) v;} return;}}Космическая свертка
Двумерная свертка часто встречается при обработке изображений, и большинство дискретных форм двумерной свертки используются при обработке изображений.
Ниже приведены различные эффекты свертки, реализованные CV4J.
CV4J в настоящее время поддерживает следующие фильтры пространственной свертки
| фильтр | имя | эффект |
|---|---|---|
| ConvolutionHvfilter | сверток | Размытие или снижение шума |
| Minmaxfilter | Максимальная и минимальная фильтрация | Разоблачение |
| Sapnoisefilter | Соль и перец шум | Увеличить шум |
| Sharpfilter | Заострить | Увеличен |
| Медимафильтер | Средняя фильтрация | Разоблачение |
| Лапласфильтер | Лаплас | Извлечение краев |
| FindEdgeFilter | Найдите край | Градиент добыча |
| Sobelfilter | градиент | Получите градиентную добычу в направлениях x и y |
| Dariancefilter | Фильтрация дисперсии | Фильтрация высокой частоты |
| Maeroperatorfilter | Март операция | Фильтрация высокой частоты |
| USMFILTER | USM | Увеличен |
CV4J - это библиотека обработки изображений, разработанная Mroomyfish и I, и все еще находится в ранней версии.
Функции, которые были реализованы в настоящее время:
На этой неделе мы внесли серьезные коррективы в CV4J и оптимизировали общую архитектуру. Также добавлена функция пространственной сверты (улучшение изображения, заточка, размытие и т. Д.). Далее мы проведем бинарный анализ изображений (коррозия, расширение, открытие и закрытие, извлечение контура и т. Д.)
Суммировать
Выше приведено все содержание этой статьи о программировании Java для реализации гауссовского размытия и пространственной свертки изображений. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на этот сайт:
70 строк кода Java для реализации обмена алгоритмами глубокой нейронной сети
Язык Java реализует код пример алгоритма Cruzkal на основе неисправных авторизованных графиков
Полный пример кода алгоритма Java для реализации красного и черного дерева
Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!