Обработка изображений на основе Вейвлет-преобразований

Системы передачи данных и цифровой обработки сигналов. Дискретное вейвлет преобразование изображения. Публикация ортонормальной системы базисных функций с локальной областью определения. Поиск изображений по образцу и многомасштабное редактирование.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 07.08.2018
Размер файла 853,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Сборка мусора очень удобна, но за ее использование приходится расплачиваться большим потреблением памяти и низкой произодительностью. Программисты C++ могут (и должны) освобождать блоки памяти сразу после того, как они перестали быть нужны. С Java блоки не освобождаются до очередного вызова сборщика мусора, периодичность работы которого зависит от использумой реализации JVM. Вдобавок к большому расходу памяти процесс сборки мусора требует дополнительной процессорной мощности, которая в результате становится недоступной приложению, и это приводит к замедлению его работы. Поэтому периодическая работа сборщика мусора может приводить к "замораживанию" Java-программы на несколько секунд. Лучшие реализации JVM минимизируют такие замораживания, но не устраняют их полностью.

При работе с внешними программами и устройствами, например, во время ввода/вывода или при взаимодействии с базой данных, желательно закрыть файл или соединение с базой данных сразу же после того, как они перестали быть нужны. Благодаря деструкторам C++ это происходит сразу после вызова delete. В Java закрытие произойдет лишь во время следующего цикла работы сборщика мусора. В лучшем случае это может привести к излишней блокировке ресурсов, в худшем - к нарушению целостности открытых ресурсов.

Тот факт, что Java-программы используют блоки памяти большие, чем необходимо, является особенно критичным для встраиваемых устройств, объемы памяти которых невелики. Неслучайно, что до сих пор (на время написания этой статьи) не существует полной реализации Java-платформы для встраиваемых устройств, а лишь ее частичные реализации.

Главная причина, по которой сборка мусора является более дорогостоящей, чем непосредственное управление памятью программистом, - это утрата информации. В C++ программе программист знает и местонахождение своих блоков памяти (сохраняя указатели на них), и когда они перестанут быть ему нужными. В Java-программе последняя информация недоступна для JVM (даже если она известна программисту), поэтому JVM должна перебирать все блоки на предмет отсутствующих указателей. Для того, чтобы вызвать сборку мусора вручную, Java-программист может удалить все указатели на больше ненужные ему блоки памяти. Но со стороны программиста это потребует больше усилий, чем непосредственное управление памятью в C++; и тем не менее, во время сборки мусора JVM все равно придется проверить все блоки памяти, чтобы освободить неиспользуемые.

С технической точки зрения, нет ничего такого, что бы мешало реализовать сборку мусора в C++ программах. Существуют обеспечивающие это коммерческие программы и библиотеки. Но из-за перечисленных выше недостатков немногие C++ программисты используют их. Инструментарий Qt использует более эффективный подход для упрощения задачи управления памятью: при удалении объекта все зависящие от него объекты также автоматически удаляются. Подход Qt не мешает программистам по желанию самостоятельно удалять объекты.

Так как управление памятью в C и C++ обременительно для программиста, созданное с помощью этих языков программное обеспечение обвиняется в нестабильной работе и подверженности ошибкам. Хотя некорректная работа с памятью в C и C++ может привести к более критичным ошибкам (обычно приводящим к аварийному завершению программы), хорошие знания, инструментарий и опыт могут значительно уменьшить связанный с этим риск. Изучению управления памятью должно уделяться достаточно внимания. Также существует большое число коммерческих и свободных инструментов, позволяющих программистам обеспечить отсутствие в программах ошибок при работе с памятью; например, ParasoftInsure++, RationalPurify и ElectricFence. Гибкая система управления памятью в C++ делает возможным создавать адаптированные для любого типа приложений профилировщики памяти.

В результате этого обсуждения мы убедились в том, что при сравнимой продуктивности программирования C++ обеспечивает приложениям гораздо лучшие, чем Java, производительность работы и эффективность использования памяти.

Java-платформа предлагает внушительное число пакетов, насчитывающих сотни классов для любых задач, включая пользовательский графический интерфейс, безопасность, поддержку сети и прочие. Это несомненное преимущество Java-платформы. Любому Java-пакету соответствует, как минимум, одна C++ библиотека, хотя иногда бывает очень трудно собрать в одном C++ проекте множество библиотек и заставить их вместе правильно работать.

Однако это преимущество Java является также ее недостатком. Разобраться в огромномAPI программисту становится все сложнее. Можете быть наверняка уверены, что для любой задачи всегда найдется уже готовое решение или, по крайней мере, решение, облегчающее выполнение этой задачи. Но найти пригодный для этого пакет и класс становится все труднее. Также с увеличением числа пакетов стремительно растет размер Java-платформы. В результате стали возникать ее "урезанные" версии, утратившие преимущества готовых решений. Таким образом, размер Java-платформы делает практически невозможным создание Java-систем небольшими производителями независимо от создателя JavaSunMicrosystems, что ослабляет конкуренцию.

Если преимущества Java заключаются в доступных библиотеках, то явные преимущества C++ - в имеющихся средствах разработки. За все время существования семейства языков C и C++ было создано огромное количество самых разнообразных средств разработки, включая инструменты для дизайна, отладки и профилирования. Имеющиеся средства разработки для Java часто уступают по возможностям своим C++ -аналогам. Это справедливо даже для инструментов от одного производителя; например, сравните Java и C/C++ -версии профилировщика RationalQuantify.

Самым важным инструментом для любого разработчика, использующего компилируемые языки, является компилятор. Основным достоинством компиляторов C++ является скорость работы. Для обеспечения кросс-платформенности своих компиляторов (и других средств разработки) производители Java-инструментов часто сами используют Java, со всеми вытекающими отсюда проблемами производительности и эффективности использования памяти. Иногда встречаются Java-компиляторы, написанные на C/C++ (например, IBMJikes), но это редкость.

Проведя анализ языков, выбор остановился на языке C++.

4.2 Разработка приложения

Вейвлет-преобразования учувствуют в обработке изображений достаточно весомо. Это может быть как поиск объекта на изображении, так и в роли компрессора, который позволяет используя быстрое преобразование Хаара сжимать изображение.

Учитывая, что существует специальная библиотека C++ Wavelet Libraries для языка C++, после выбора языка мы вполне можем использовать ее, как готовое решение.

Давайте рассмотрим возможности данной библиотеки.

Данная библиотека обладает хорошим обучающим материалом, в ней можно легко реализовать простейшие действия с вейвлет-преобразованием

Рис. 4.1 - 256 битовый обычный сигнал от Wavelet Libraries

#include <iostream>

#include <fstream>

#include "wavelet2s.h"

#include <vector>

#include <string>

#include <cmath>

#include <algorithm>

using namespace std;

void findthresh(vector<double> vector1, int N, double& t){

sort(vector1.begin(), vector1.end(), greater<double>());

t = vector1.at(N-1);

}

int main() {

cout " "********J- LEVEL DISCRETE WAVELET TRANSFORM IMPLEMENTATION*********" " endl;

cout " "This program accepts signal from the user in a file format " " endl;

cout " "and performs Discrete Wavelet Transform with specified " " endl;

cout " "wavelet. " " endl;

cout " " " " endl;

cout " " The Following Wavelets are in the Database: " " endl;

cout " " haar, db1, db2, db3, db4, db5, db6, db7, db8, db9, db10, " " endl;

cout " " db11, db12, db13, db14, db15. " " endl;

cout " " bior1.1, bio1.3, bior1.5, bior2.2, bior2.4,bior2.6,bior2.8, " " endl;

cout " " bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4," " endl;

cout " " bior5.5, bior6.8." " endl;

cout " " coif1, coif2, coif3, coif4, coif5." " endl;

cout " "Please Enter the Wavelet Name at the Prompt(No quotes) :" " endl;

string nm; // nm will store the name of Wavelet Family

cin " nm;

cout " "Enter the name of signal file at the Prompt eg., signal.txt :" " endl;

char inp[50];

cin " inp;

vector<double> sig;

ifstream sig_inp(inp);

if (!sig_inp.good()){

cout " "The File doesn't exist"" endl;

exit(1);

}

while (sig_inp) {

double temp;

sig_inp " temp;

sig.push_back(temp);

}

sig.pop_back();

vector<double> original;

original = sig;

cout " "Please Enter the Number of DWT Stages J :" " endl;

int J;

cin " J ;

vector<double> dwt_output, flag;

vector<int> length1;

// perform J-Level DWT

dwt(sig, J, nm, dwt_output,flag, length1);

// Performing Linear Approximation by using only first 100 coefficients

// Coefficients in dwt_output are stored as following

// dwt_output =[ Appx(J-1) Detail(J-1) Detail(J-2) .... Detail(0)]

int n_coef = 100; // Number of significant coefficients

int n_non_sig= dwt_output.size() - n_coef; // Number of Coefficients that will

// be set to zero

dwt_output.erase(dwt_output.end()- n_non_sig,dwt_output.end());

// Deleting last n_non_sig coefficients and replacing them with zeros

dwt_output.insert(dwt_output.end(),n_non_sig,0);

ofstream linearsig("linsig.txt");

for (unsigned int i = 0; i < dwt_output.size(); i++) {

linearsig " dwt_output[i] " endl;

}

// Finding IDWT with approximated coefficients

vector<double> output;

idwt(dwt_output, flag,nm,output, length1);

unsigned int count = output.size();

ofstream gnulinappx("gnulinappx.dat");

for (unsigned int i = 0;i < count; i++) {

gnulinappx " output[i] " endl;

}

gnulinappx.close();

// Performing Non Linear Approximation by using only most

// significant coefficients

vector<double> dwt_output2, flag2;

vector<int> length2;

// perform J-Level DWT

dwt(sig, J, nm, dwt_output2,flag2,length2);

double thresh = 0.0;

vector<double> temp_dwtoutput;

for (unsigned int i =0; i < dwt_output2.size();i++){

double temp = abs(dwt_output2[i]);

temp_dwtoutput.push_back(temp);

}

/*

for (unsigned int i =0; i < temp_dwtoutput.size(); i++){

cout " temp_dwtoutput[i] " endl;

}

*/

findthresh(temp_dwtoutput,n_coef, thresh);

for (unsigned int i = 0; i < dwt_output2.size();i++){

double temp = abs(dwt_output2[i]);

if (temp < thresh){

dwt_output2.at(i) = 0.0;

}

}

/*

for (unsigned int i =0; i < dwt_output2.size(); i++){

cout " dwt_output2[i] " endl;

}

*/

ofstream nonlinsig("nonlinsig.txt");

for (unsigned int i = 0; i < dwt_output2.size(); i++) {

nonlinsig " dwt_output2[i] " endl;

}

// Finding IDWT with approximated coefficients

vector<double> output2;

idwt(dwt_output2, flag2,nm,output2, length2);

unsigned int count2 = output2.size();

cout " count2 " endl;

ofstream gnunlappx("gnunlappx.dat");

for (unsigned int i = 0;i < count2; i++) {

gnunlappx " output2[i] " endl;

}

gnunlappx.close();

return 0;

}

Результатом моей дипломной работы стало приложение для компрессии изображений с помощью вейвлет преобразований. Архитектура проекта достаточно проста.

Вейвлетное сжатие - общее название класса методов кодирования изображений, использующих двумерное вейвлет-разложение кодируемого изображения. Во многих источниках литературы сказано, что это сжатие обязательно с колоссальными потерями. На примере своего приложения, я протестировал, используя двукратное сжатие.

Основной сценарий сжатия:

· Загружаем изображение из файла;

· Конвертируем загруженное изображение в байтовый массив RGB-значений;

· Перекодируем RGB в YCrCb с квантованием итоговых цветовых компонентов;

· Применяем вейвлет;

· Переводим многомерный массив в одномерный (плоский);

· Сжимаем полученный поток любыми доступными средствами (например GZip).

· Коэффициенты для сжатия в представленном коде подобраны с целью получения минимального по размеру выходного файла, но с возможностью, что-то разглядеть.

Рис. 4.2 - внешний вид главного окна приложения

Рис. 4.3 - внешний вид главного окна при 2-кратном сжатии изображения

Заключение

В результате проделанной работы был рассмотрен алгоритм вейвлет-преобразований изображений, реализованный в приложении для сжатия изображений.

Для достижения поставленной цели были решены следующие задачи:

1) Изучена теоретическую часть по теме ВКР

2) Подготовлено необходимое программное обеспечение

3) Разработать приложение для обработки изображений

4) Описать основные возможности разработанного приложения

Можно подвести вывод, что вейвлет-преобразования много участвуют в естественных науках, инженерном деле, математике (включая прикладную). Наиболее широко ДВП используется в кодировании сигналов, где свойства преобразования используются для уменьшения избыточности в представлении дискретных сигналов, часто-- как первый этап в компрессии данных.

Список использованных источников

1. Шилдт Г. C++. Базовый курс [Текст]/ Шилдт Г.М.: "Вильямс", 2008. - 624 с.

2. Щупак Ю. C/C++. Структурное и объектно-ориентированное программирование: практикум [Текст]/ Щупак Ю., Павловская Т. - СПб.: "Питер", 2010. - 436 с.

3. Bradski G. Learning OpenCV: Computer Vision with the OpenCV Library [Текст]/ Bradski G., Kaehler A. - "O'Reilly Media", 2008. - 123 с.

4. Рао С. Освой самостоятельно C++ за 21 день [Текст]/ М.: "Вильямс", 2015. - 699 с.

5. Подбельский В.В. Язык C++. Учебное пособие [Текст] / В.В. Подбельский - Москва: Финансы и статистика, 1994 - 560с.

6. Седжвик Р. Алгоритмы на C++ [Текст]/ Седжвик Р.М.: "Вильямс", 2011. - 1056 с.

7. Литвиненко Н.А. - Технология программирования на С++ [Текст]/ Гуревич С -М.: БХВ-Петербург, 2010. - 281 с.

8. Ирэ Пол. Объектно-ориентированное программирование с использованием C++ / Пол. Ирэ; пер. с англ. - Киев: НИИПФ ДиаСофт Лтд, 1996 - 480с.

9. Форсайт Д. Компьютерное зрение. Современный подход / Форсайт Д., Понс Ж. // М: Издательский дом" Вильямс. - 2004. 314с.

10. Грузман И.С. Цифровая обработка изображений в информационных системах: Учебное пособие / И.С. Грузман, В.С. Киричук, В.П. Косых и др. - Новосибирск: Изд-во НГТУ, 2002. - 352 c.

11. OpenCV documentation [Electronic resource]//OpenCV documentation. 2014. URL: ttp://docs.opencv.org/ (access date 24.02.2015)

Приложение А

Программный код

#include <iostream>

#include <fstream>

#include <vector>

#include <string>

#include <complex>

#include <cmath>

#include <algorithm>

#include "wavelet2d.h"

#include "cv.h"

#include "highgui.h"

#include "cxcore.h"

using namespace std;

using namespace cv;

void* maxval(vector<vector<double> > &arr, double &max){

max = 0;

for (unsigned int i =0; i < arr.size(); i++) {

for (unsigned int j =0; j < arr[0].size(); j++) {

if (max <= arr[i][j]){

max = arr[i][j];

}

}

}

return 0;

}

void* maxval1(vector<double> &arr, double &max){

max = 0;

for (unsigned int i =0; i < arr.size(); i++) {

if (max <= arr[i]){

max = arr[i];

}

}

return 0;

}

int main() {

IplImage* img = cvLoadImage("snow.jpg");

if (!img){

cout " " Can't read Image. Try Different Format." " endl;

exit(1);

}

int height, width;

height = img->height;

width = img->width;

int nc = img->nChannels;

// uchar* ptr2 =(uchar*) img->imageData;

int pix_depth = img->depth;

CvSize size;

size.width =width;

size.height=height;

cout " "depth" " pix_depth " "Channels" " nc " endl;

cvNamedWindow("Original Image", CV_WINDOW_AUTOSIZE);

cvShowImage("Original Image", img);

cvWaitKey();

cvDestroyWindow("Original Image");

cvSaveImage("orig.bmp",img);

int rows =(int) height;

int cols =(int) width;

Mat matimg(img);

vector<vector<double> > vec1(rows, vector<double>(cols));

int k =1;

for (int i=0; i < rows; i++) {

for (int j =0; j < cols; j++){

unsigned char temp;

temp = ((uchar*) matimg.data + i * matimg.step)[j * matimg.elemSize() + k ];

vec1[i][j] = (double) temp;

}

}

string nm = "db3";

vector<double> l1,h1,l2,h2;

filtcoef(nm,l1,h1,l2,h2);

// unsigned int lf=l1.size();

// int rows_n =(int) (rows+ J*(lf-1));

// int cols_n =(int) (cols + J * (lf -1));

// Finding 2D DWT Transform of the image using symetric extension algorithm

// Extension is set to 3 (eg., int e = 3)

vector<int> length;

vector<double> output,flag;

int J =3;

dwt_2d_sym(vec1,J,nm,output,flag,length);

double max;

vector<int> length2;

// This algorithm computes DWT of image of any given size. Together with convolution and

// subsampling operations it is clear that subsampled images are of different length than

// dyadic length images. In order to compute the "effective" size of DWT we do additional

// calculations.

dwt_output_dim_sym(length,length2,J);

// length2 is gives the integer vector that contains the size of subimages that will

// combine to form the displayed output image. The last two entries of length2 gives the

// size of DWT (rows_n by cols_n)

int siz = length2.size();

int rows_n=length2[siz-2];

int cols_n = length2[siz-1];

vector<vector< double> > dwtdisp(rows_n, vector<double>(cols_n));

dispDWT(output,dwtdisp, length,length2, J);

// dispDWT returns the 2D object dwtdisp which will be displayed using OPENCV's image

// handling functions

vector<vector<double> > dwt_output= dwtdisp;

maxval(dwt_output,max);// max value is needed to take care of overflow which happens because

// of convolution operations performed on unsigned 8 bit images

//Displaying Scaled Image

// Creating Image in OPENCV

IplImage *cvImg; // image used for output

CvSize imgSize; // size of output image

imgSize.width = cols_n;

imgSize.height = rows_n;

cvImg = cvCreateImage(imgSize, 8, 1);

// dwt_hold is created to hold the dwt output as further operations need to be

// carried out on dwt_output in order to display scaled images.

vector<vector<double> > dwt_hold(rows_n, vector<double>(cols_n));

dwt_hold = dwt_output;

// Setting coefficients of created image to the scaled DWT output values

for (int i = 0; i < imgSize.height; i++) {

for (int j = 0; j < imgSize.width; j++){

if (dwt_output[i][j] <= 0.0){

dwt_output[i][j] = 0.0;

}

if (i <= (length2[0]) && j <= (length2[1])) {

((uchar*)(cvImg->imageData + cvImg->widthStep*i))[j] =

(char) ((dwt_output[i][j] / max) * 255.0);

} else {

((uchar*)(cvImg->imageData + cvImg->widthStep*i))[j] =

(char) (dwt_output[i][j]) ;

}

}

}

cvNamedWindow("DWT Image", 1); // creation of a visualisation window

cvShowImage("DWT Image", cvImg); // image visualisation

cvWaitKey();

cvDestroyWindow("DWT Image");

cvSaveImage("dwt.bmp",cvImg);

// Finding IDWT

vector<vector<double> > idwt_output(rows, vector<double>(cols));

idwt_2d_sym(output,flag, nm, idwt_output,length);

//Displaying Reconstructed Image

IplImage *dvImg;

CvSize dvSize; // size of output image

dvSize.width = idwt_output[0].size();

dvSize.height = idwt_output.size();

cout " idwt_output.size() " idwt_output[0].size() " endl;

dvImg = cvCreateImage(dvSize, 8, 1);

for (int i = 0; i < dvSize.height; i++)

for (int j = 0; j < dvSize.width; j++)

((uchar*)(dvImg->imageData + dvImg->widthStep*i))[j] =

(char) (idwt_output[i][j]) ;

cvNamedWindow("Reconstructed Image", 1); // creation of a visualisation window

cvShowImage("Reconstructed Image", dvImg); // image visualisation

cvWaitKey();

cvDestroyWindow("Reconstructed Image");

cvSaveImage("recon.bmp",dvImg);

return 0;

}

Размещено на Allbest.ru

...

Подобные документы

  • Применение вейвлет-преобразования для сжатия и обработки медицинских сигналов и изображений. Разработка алгоритма автоматизированного выделения PQRST-признаков в сигнале электрокардиограмм с помощью вейвлет-инструментария математического пакета Matlab.

    дипломная работа [4,6 M], добавлен 16.07.2013

  • Основные понятия стеганографии. Атаки на стегосистемы, стегосистемы водяных знаков. Применение дискретных вейвлет преобразований в кодировании цифровых зображений. Алгоритмы стеганографического встраивания информации в изображения формата JPEG2000.

    дипломная работа [3,5 M], добавлен 09.06.2013

  • Типы изображений (черно-белые, полутоновые, цветные) и их форматы. Устройства, создающие цифровые изображения, и их параметры. Применение и характеристики методов сжатия изображений. Поиск по содержимому в базах данных изображений. Структуры баз данных.

    презентация [360,4 K], добавлен 11.10.2013

  • Обработка изображений на современных вычислительных устройствах. Устройство и представление различных форматов изображений. Исследование алгоритмов обработки изображений на базе различных архитектур. Сжатие изображений на основе сверточных нейросетей.

    дипломная работа [6,1 M], добавлен 03.06.2022

  • Изучение современных методик компьютерной обработки биомедицинских изображений с целью улучшения изображений для их наилучшего визуального восприятия врачом-диагностом и эффективного сжатия изображений – для надежного хранения и быстрой передачи данных.

    курсовая работа [2,3 M], добавлен 15.04.2019

  • Описание математических методов представления и обработки графических изображений. Описание разработанного программного дополнения. Описание функций и их атрибутов. Представление и обработка графических изображений. Результаты тестирования программы.

    курсовая работа [1,7 M], добавлен 27.01.2015

  • Характеристика сигнала и его представление в виде математического ряда. Условия ортогональности двух базисных функций. Ряд Фурье, его интегральное преобразование и практическое использование в цифровой технике для обработки дискретной информации.

    реферат [69,9 K], добавлен 14.07.2009

  • Цифровые рентгенографические системы. Методы автоматического анализа изображений в среде MatLab. Анализ рентгеновского изображения. Фильтрация, сегментация, улучшение изображений. Аппаратурные возможности предварительной нормализации изображений.

    курсовая работа [890,9 K], добавлен 07.12.2013

  • Разработка и реализация многомасштабного анализа дискретных сигналов путем вейвлет-преобразований и структурной индексации, объединение методов в единую систему. Поисково-исследовательский характер и направление на упрощение многомасштабного анализа.

    дипломная работа [3,0 M], добавлен 01.07.2008

  • Обзор методов создания Web-ресурса для публикации фотопанорамных изображений. Необходимые компоненты для работы сервера. Создание хранилища данных в программной оболочке Denwer. Публикация готовых панорамных изображений на сайте кафедры ИСКМ ВолГУ.

    курсовая работа [1,9 M], добавлен 28.08.2012

  • История появления и основные понятия графического дизайна. Выявление главных преимуществ и недостатков недеструктивной обработки изображений. Сравнение деструктивной и недеструктивной обработки изображений. Сущность и особенности двухмерной графики.

    реферат [5,2 M], добавлен 05.05.2023

  • Изучение и программная реализация в среде Matlab методов обработки, анализа, фильтрации, сегментации и улучшения качества рентгеновских медицинских изображений. Цифровые рентгенографические системы. Разработка статически обоснованных алгоритмов.

    курсовая работа [4,7 M], добавлен 20.01.2016

  • Методика устранения посторонних шумов и коррекции искажения типа дисфокусировки. Обрезка сильно искаженных краев изображения. Построение яркостной гистограммы изображения и его преобразование в индексный формат с восьмицветовой палитрой в пакете Matlab.

    контрольная работа [4,7 M], добавлен 13.01.2012

  • Технология считывания данных в современных устройствах оцифровки изображений. Принцип работы черно-белых и цветных сканеров. Цифровое кодирование изображений. Программные интерфейсы и TWAIN. Способ формирования изображения. Преимущество галогенной лампы.

    реферат [2,2 M], добавлен 02.12.2012

  • Современные системы текстурного анализа изображений. Примеры текстурной сегментации одноканальных изображений. Использование признаков, полученных на основе гистограммы яркостей второго порядка, для классификации спектрозональных аэрофотоснимков.

    реферат [573,5 K], добавлен 15.01.2017

  • Обзор существующего программного обеспечения для автоматизации выделения границ на изображении. Разработка математической модели обработки изображений и выделения контуров в оттенках серого и программного обеспечения для алгоритмов обработки изображений.

    дипломная работа [1,7 M], добавлен 27.03.2013

  • Обнаружение деталей и их границ изображения. Применение ранговых алгоритмов. Использование алгоритмов адаптивного квантования мод в режиме пофрагментной обработки. Обобщенная линейная фильтрация изображений. Восстановление отсутствующих участков.

    курсовая работа [1,8 M], добавлен 17.06.2013

  • Получение вейвлетов Габора из представления путем его поворота и растяжения для известного числа масштабов и ориентаций. Описание процедуры pullback. Детектор края, реализация алгоритма. Генерация представления изображения с помощью вейвлетов Габора.

    курсовая работа [1021,4 K], добавлен 29.10.2017

  • Общий алгоритм сравнения двух изображений. Метод максимальных площадей. Метод гистограмм. Подготовка изображения к распознаванию. Моделирование многомерной функции. Распределение векторов. Деформируемые модели. Реализация программного обеспечения.

    дипломная работа [384,2 K], добавлен 29.09.2008

  • Разработка приложения, целью которого ставится преобразование черно-белых полутоновых изображений в цветные. Обзор методики обработки изображения, способов преобразования изображения с помощью нейронной сети. Описания кластеризации цветового пространства.

    дипломная работа [6,3 M], добавлен 17.06.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.