Разработка эффективного алгоритма параллельной обработки данных в модуле масштабирования цифровых изображений с использованием метода направленной интерполяции
Обзор существующих методов для масштабирования изображений и выбор метода дающего наилучшее качество изображения. Разработка модификации алгоритма путем распараллеливания операций. Демонстрация работы с программой и оценка эффективности алгоритмов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 25.06.2017 |
Размер файла | 3,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Анализ существующих методов для масштабирования изображений и постановка задачи
1.1 Постановка задачи
1.2 Методы масштабирования
1.2.1 Алгоритм ближайшего соседа
1.2.2 Алгоритм билинейной интерполяции
1.2.3 Алгоритм бикубической интерполяции
1.2.4 Суперсемплинг
1.2.5 Алгоритм направленной интерполяции
2. Алгоритм масштабирования и реализация алгоритма
2.1 Алгоритм масштабирования
2.2 Алгоритм масштабирования с использованием параллелизма
2.3 Реализация алгоритма
3. Демонстрация работы с программой и оценка эффективности полученных алгоритмов
3.1 Демонстрация работы с программой
3.2 Оценка эффективности алгоритмов
Заключение
Список используемой литературы
Приложения
Введение
В последние годы в связи с развитием множества цифрового оборудования для наблюдения и съемки, таких как телевидение высокой четкости, есть необходимость в существовании быстрых способов для увеличения изображения. Например, в тех случаях, когда производится масштабирование изображения в режиме реального времени. Это технологическая разработка позволит приносить больше качественных фильмов в наши дома. Однако значение этого выходит далеко за рамки домашних развлечений и имеет множество способов для использования, таких как медицинская визуализация или компьютерная графика.
Основной задачей предполагается распараллеливание алгоритма для масштабирования изображений. Представим, что на входе подается цифровое изображение, размер которого нужно или увеличить, или уменьшить. Существующие в наше время алгоритмы масштабирования дают возможность быстро и эффективно изменить размер изображения, однако за счет использования параллелизма можно добиться повышения скорости обработки и изменения изображения.
Операция масштабирования представляет собой процесс изменения размера. В этой работе будет использован метод направленной интерполяции для масштабирования изображений. Интерполяция - это способ, который увеличивает количество пикселей в цифровом изображении. В то время как метод увеличивает количество пикселей, из которых состоит изображение, становятся все более заметными эффекты, которые появляются в процессе увеличения изображения, а именно резкость краев теряется и изображение становится более плавным. Эти эффекты могут привести к неровным или размытым деталям на изображениях. Когда же происходит уменьшение размера изображения (уменьшение выборки), то можно заметить тенденцию к появлению резкости в изображениях. Интерполяция в принципе представляет собой аппроксимацию значений в неизвестных точках, используя известные данные, и поэтому качество изображения при выполнении операции интерполяции будет ухудшаться с каждым разом[1].
Современные алгоритмы делятся на две группы. Первая группа представляет собой алгоритмы, которые базируются на предварительном подсчете коэффициентов, что обозначают пропорции, в которых будет производится смешивание цветов соседних пикселей в процессе масштабирования. Ко второй группе относятся алгоритмы, которые в первую очередь анализируют изображение, для того, чтобы рассчитать уникальное множество коэффициентов для каждого изображения. Чаще всего алгоритмы этой группы выдают лучшие результаты, более качественное и четкое изображение, и в то же время вычисления у этих методов более сложные. К примерам первой группы можно отнести:
· метод ближайшего соседа;
· бикубическа и билинейная интерполяция.
Наглядным примером второй группы является алгоритм направленной интерполяции[2].
Есть множество сфер жизни, где можно применить полученный алгоритм для масштабирования. Значительный вклад будет производится в сферу съемки как домашней, так и профессиональной. Там максимально важна скорость масштабирования так же как и качество. Кроме того, алгоритм найдет хорошее применение в компьютерной графике, в том числе при создании игр, для того чтобы не прорисовывать каждый фрагмент игры, а просто производить масштабирование. Еще алгоритм можно использовать для просмотра и редактирования изображений. Например, известная программа AdobePhotoshopдля масштабирования использует методы билинейной и бикубической интерполяции, а также метод ближайшего соседа[3]. Алгоритм направленной интерполяции может стать хорошим инструментом для масштабирования для этой программы. Кроме того, алгоритм можно использовать для дистанционного зондирования и многого другого.
Главной целью данной работы является создание алгоритма направленной интерполяции, сначала линейного метода, а потом с использованием принципов параллелизма. А также оценить эффективность полученных алгоритмом. Кроме того, необходимо оценить существующие методы для масштабирования изображений и обосновать выбор метода направленной интерполяции.
В главе 1 рассмотрены существующие методы для масштабирования изображения. Приведены их сильные и слабые стороны и показаны примеры работы каждого метода. Кроме того, сформулированы основные задачи этой работы. Во второй главе описаны прямой и параллельный алгоритмы для масштабирования изображений, а также показана реализация данных алгоритмов с помощью языка C++. В третьей главе продемонстрирована работа программы, приведены примеры обработанных изображений и оценка эффективности для полученных алгоритмов.
алгоритм цифровой изображение интерполяция
1. Анализ существующих методов для масштабирования изображений и постановка задачи
1.1 Постановка задачи
Для того, чтобы достигнуть целей данной работы необходимо выполнить несколько задач. А именно:
1. Рассмотреть существующие методы для масштабирования изображений и выбрать метод дающий наилучшее качество изображения.
2. Разработать алгоритм для выбранного метода.
3. Разработать модификацию алгоритма путем распараллеливания операций.
4. Оценить эффективность каждого из алгоритмов.
1.2 Методы масштабирования
Есть множество алгоритмов, которые были созданы для масштабирования изображений. Зрительная система человека очень чувствительна к неправильным узорам и лестничному эффекту[4], поэтому основной целью этих алгоритмов не только изменить размер изображения, но и сохранить качество изображения на высоком уровне.
Этот раздел главы будет посвящен различным методам масштабирования изображений. Также будет обращено внимание на преимущества и недостатки методов,и кроме того приведены примеры работы некоторых алгоритмов. Каждый из методов будет оценен по критериям сохранения качества изображения и по вычислительной сложности.
1.2.1 Алгоритм ближайшего соседа
Простейший алгоритм ближайших соседей (ближайших пикселей) отвечают за периодические исключения или дублирования пикселей изображений. Под все пиксели конечных изображений выбираются пиксели исходных изображений, которые наиболее близки к расположению пикселей с учетом выполненного масштабирования. К примеру, если масштабирование составляет девяносто девять или сто один процент, каждая сотая точка убирается или дублируется. Важно учитывать, что алгоритмы склонны к блочности. Это можно заметить по краям. Нередко бывают заметны изменения в изображениях, если проявляются изменения общих рисунков или проявления неправильных узоров. Как правило, у алгоритма низкая эффективность, даже если размеры изменены незначительно. Однако у него низкая вычислительная сложность. Это помогает быстрее выполнить масштабирование.
1.2.2 Алгоритм билинейной интерполяции
Билинейная интерполяция более сложный метод. Зато он более качественный. Свое название он получил от соответствующей математической операции. В компьютерной графике в подобном способе значение функции обычно отображается с помощью составляющих цветов пикселя. Важно учитывать, что в таком случае образуемый основными точками квадрат считается единичным.
В вычислительной математике билинейная интерполяция считается расширением операции интерполяции для функции двух переменных. Также стоит сказать, что суть подобного метода заключается в проведении линейных интерполяций в необходимых направлениях.
Предположим, что значение данной функции должно быть интерполировано в координатеЧтобы выполнить эту задачу, нужно знать, каковы значения функции в точках, расположенных рядом с . Иными словами надо знать значения точек
и .
После этого необходимо линейно интерполировать значения вспомогательных координат и по оси абцисс, в таком случае . В результате и значения координат функций вычисляются по вышеуказанным формулам:
,
После чего необходимо провести линейную интерполяцию между координатами и . Для этого используется следующая формула:
Это приблизительное значение функции в координате Р. В развернутом виде эта формула выглядит так:
У билинейной интерполяции есть свои недостатки. Так, важно учитывать, что если увеличить в N раз изображение размером на пикселей можно получить итоговое изображение, размеры которого будут не на пикселей, а на пикселей.
Как правило, подобное случается так как исходное соображение содержит по горизонтали точек. Если говорить точнее, то имеется смежных пар. Когда выполняется операция увеличения исходного изображения в N раз между всеми парами исходных точек вставляются дополнительных точек. Если изображение увеличивается в два раза, между главными пикселями нужно вставить еще одну точку. Когда изображение увеличивается втрое, вставьте две точки и так далее. В результате ширина итогового изображения будет равняться сумме имеющихся основных и дополнительных точек. Оно соответствует такому равенству.
В конце этого выражения появляется единица, потому что для последних пикселей в каждой строке и столбце нет пары для осуществления интерполирования. Помимо этого, подобный метод нередко создает эффект смягчения деталей. В результате изображение может размываться. Однако проявляется значительный лестничный эффект. В любом случае с помощью масштабирования можно получить необходимое качество даже если изображение изменяется незначительно. Вычислительная сложность у такого алгоритма низкая.
1.2.3 Алгоритм бикубической интерполяции.
Метод бикубической интерполяции - развитие метода билинейной интерполяции. Чтобы вычислить градиент новых пикселей, необходимо использовать квадрат размерами четыре на четыре. Для билинейной интерполяции используется квадрат два на два. Так как расстояния до всех интересующих пикселей разные, необходимо ввести систему весов, отражающую вклад цветов имеющихся пикселей в цвет искомых. Для близко расположенных пикселей значение весов составит . Для четырех отдаленных пикселей значения составят и для оставшихся пикселей. Билинейная интерполяция дает менее качественные изображения, чем бикубическая. Зато у нее меньше вычислительная сложность.
Как вариант можете использовать другие типы интерполяции. Однако качество полученных формул в результате вычисления значений функции по близко расположенным координатам будет хуже, чем у бикубической интерполяции[5].
Примеры работы каждого из вышеописанных методов можно найти в приложении 1 и приложении 2.
1.2.4 Суперсемплинг
Еще один известный метод называется суперсемплинг. Суть этого метода в выделении N выборок на определенное количество пикселей. После чего необходимо разбить исходное изображение на сетки конечных изображений. Все полученные выборки, попавшие на конечные пиксели необходимо сложить. Конечный цвет пикселей можно определить с помощью среднего арифметического полученных выборок, попадающих внутрь пикселей. Если проведено N выборок, формула будет выглядеть так:
Где
- цвет получившегося пикселя.
- цвет i-ой выборки.
- число выборок, пришедшихся на пиксель.
У подобного метода меньшая производительность, чем у метода бикубической или билинейной интерполяции. Также среди минусов подобного метода можно назвать наличие повышенных требований к компьютерным ресурсам. К примеру, когда (это бывает, когда на четыре выборки приходится один пиксель) применение такого метода приравнивается к увеличению разрешения экрана в два раза[6].
1.2.5 Алгоритм направленной интерполяции.
Основа алгоритма направленных интерполяций - вычисление градиента цветов пикселя. Под градиентом принято понимать вектор, показывающий направление наиболее быстрого возрастания исходной величины , значение которой меняется при перемещении к разным точкам пространства. Когда за взято значение оттенка пикселя, значит во всех исходных точках изображения градиенты покажут направление границ оттенка. Этот метод представляет собой упрощенную с точки зрения вычислений билинейную интерполяцию, которая заменяет непростую формулу вычисления значений функции оттенка пикселя на функцию расчет значения градиента в точках назначения и в точке исходного изображения, соприкасающегося с ней, если исходное изображение увеличено в два раза. С этой целью текущие обрабатываемые пиксели масштабированного изображения условно должны быть поделены еще на четыре.
На рисунке 1 отображен отбор пикселей для расчета итогового градиента.
Рис. 1. Пример отборов пикселей для правильного расчета градиента
С помощью цвета на данном рисунке выделено несколько пикселей. В них значение градиента оттенков будут использованы, чтобы вычислить цвет нескольких новых пикселей, которые получены из четвертого пикселя. Иными словами, в результате будут отобраны пиксели под номерами три, четыре, ноль и один.
После того, как вычислены значения модулей градиентов в четырех исходных пикселях, необходимо выбрать минимальный градиент. Итоговый пиксель будет создан за счет интерполяции между пикселем с минимальным градиентом и новым пикселем. В случае, если минимальные значения градиентов находятся в новых пикселях, они будут перенесены на итоговые изображения без каких-либо изменений. Раз масштаб был изменен в два раза, значит операцию интерполяции необходимо свести к расчету среднего арифметического оттенков исходных пикселей.
С помощью этого метода можно легко интерполировать вдоль границы, не игнорируя ее, как в случае бикубической или билинейной интерполяции. В результате можно заметить, что четкость полученного изображения значительно увеличена.
Основное отличие этого алгоритма от аналогов не только большее быстродействие по сравнению с билинейной интерполяцией. Также он дает пользователю возможность значительно уменьшить размытость исходного изображения. Однако у подобного метода есть недостатки. Так, изображение можно увеличить только в два раза. Иными словами, чтобы увеличить изображение в большее количество раз, нужно применить алгоритм то количество раз, которое необходимо[7].
2. Алгоритмы масштабирования и реализация алгоритма
Эта глава будет посвящена алгоритмам для масштабирования изображений. Будет описаны оба алгоритма, а после этого показана реализация алгоритма на языке С++.
2.1 Алгоритм масштабирования
Чтобы пиксель можно было интерполировать, он делиться на четыре части как показано на рисунке 2, и далее значение каждого пикселя корректируется с помощью данных пикселя в подмножестве , которое включает в себя 4 пикселя, выделенных на рисунке для того, чтобы правильно выполнить интерполяцию при наличии острых краев и гладких участков.
Рис. 2. Пиксели, используемые для интерполяции пикселя в центре и пиксели, выделенные жирным шрифтом, указывающие на подмножество.
Количество пикселей в подмножестве выбрано таким образом, что оно включает информацию, достаточную для того, чтобы корректно прогнозировать недостающие пиксели а так же избегать сложности в выборе пикселей, потому что число пикселей в подмножестве растет и сложность растет вместе с ним. Для используются пиксели ,, , , которые находятся в левой верхней части маски. Когда остальные пиксели буду интерполированы, подмножество маски передвигается и выполняются шаги, описанные ниже.
интерполируется между парой точек, между которыми разность будет минимальной. Он может быть интерполирован между:
1. Исходными пикселями и
2. Исходными пикселями и
3. Исходными пикселями и
4. Исходными пикселями и среднем значении и
Первым шагом является вычисление разности между парами исходных пикселей и , и , и и и . Таким образом находится расстояние между пикселями и далее выбирается минимальное их них. Интерполяция в данном конкретном случае означает (невзвешенное) усреднение[8][9].
2.2 Алгоритм с использованием параллелизма
Описанный выше алгоритм можно распараллелить. По разным потокам можно распараллелить операции вычисления расстояний между пикселями для того, чтобы потом из них найти минимальное значение и с этим значением провести интерполяцию. Кроме того, выполнение описанного выше алгоритма для каждого пикселя можно распараллелить по двум одновременно работающим функциям: по высоте и по ширине. То есть в один момент времени с каждым из пикселей будет проводитсяследующий алгоритм:
1. Нахождение расстояний между исходным пикселем и ближайшими тремя пикселями и между самим пикселем.
2. Анализ полученных расстояний и выбор минимального их них.
3. Проведение интерполяции с пикселем с минимальным расстоянием.
2.3 Реализация алгоритма
Алгоритм реализован с помощью языка C++.
В первую очередь после получения изображения, мы получаем вектора пикселей из битмапа. Реализуется это с помощью функции make_colors. На вход подается битмап изображения. Сначала задаются значения ширины и высоты изображения, потом выполняется разбиение каждого пикселя по трем потокам: красный, зеленый и синий. На выходе мы получаем вектора пикселей.
VecOfColorsmake_colors(constwxBitmap&bitmap)
{
autow = bitmap.GetWidth();
autoh = bitmap.GetHeight();
autoimg = bitmap.ConvertToImage();
VecOfColors R = VecOfColors(w,Colors(h,wxColor()));
for(auto i = 0;i<w;i++)
for(auto j = 0;j<h;j++)
{
auto r = img.GetRed(i,j);
auto g = img.GetGreen(i,j);
auto b = img.GetBlue(i,j);
R[i][j].Set(r,g,b);
}
return R;
};
Далее выполняется процесс масштабирования с использованием параллелизма. Делается это с помощью функции parallel_scale. На вход подается результат функции make_colors. После этого вектор увеличивается в два раза по длине и по ширине. Распараллеливание процесса происходит с помощью функции parallel_for библиотеки ppl.h[10]. Сначала заполняются пиксели, которые расположены по краям изображения. Так как происходит увеличение в два раза, поэтому заполняются по два пикселя с каждой из сторон. Далее выполняется алгоритм описанный выше для каждого пикселя.
VecOfColorsparallel_scale(constVecOfColors&data)
{
autow = data.size();
auto h = data.begin()->size();
VecOfColors R = VecOfColors(2*w,Colors(2*h,wxColor()));
Concurrency::parallel_for(static_cast<decltype(h)>(0), h,
[&R, &data,&w](decltype(h) j)
{
R[0][2*j] = data[0][j];
R[1][2*j] = data[0][j];
R[0][2*j+1] = data[0][j];
R[1][2*j+1] = data[0][j];
R[2*w-2][2*j] = data[w-1][j];
R[2*w-1][2*j] = data[w-1][j];
R[2*w-2][2*j+1] = data[w-1][j];
R[2*w-1][2*j+1] = data[w-1][j];
});
Concurrency::parallel_for(static_cast<decltype(w)>(0), w,
[&R, &data,&h](decltype(w) j)
{
R[2*j][0] = data[j][0];
R[2*j+1][0] = data[j][0];
R[2*j][1] =data[j][0];
R[2*j+1][1] = data[j][0];
R[2*j][2*h-2] = data[j][h-1];
R[2*j][2*h-1] = data[j][h-1];
R[2*j+1][2*h-2] = data[j][h-1];
R[2*j+1][2*h-1] = data[j][h-1];
});
Concurrency::parallel_for(static_cast<decltype(h)>(1), w-1,
[&R, &data,&h](decltype(w) i)
{
Concurrency::parallel_for(static_cast<decltype(i)>(1), h-1,
[&R, &data,&i](decltype(i) j)
{
auto p0 = data[i - 1][j - 1];
auto p3 = data[i - 1][j];
auto p6 = data[i - 1][j + 1];
auto p1 = data[i][j - 1];
auto p4 = data[i][j];
auto p7 = data[i][j + 1];
auto p2 = data[i + 1][j - 1];
auto p5 = data[i + 1][j];
auto p8 = data[i + 1][j + 1];
auto v0 = get_value(p1, p0, p3 ,p4);
auto v1 = get_value(p3 ,p6 ,p7 ,p4);
auto v2 = get_value(p1, p2, p5, p4);
auto v3 = get_value(p5, p8, p7, p4);
R[2 * i][ 2 * j] = v0;
R[2 * i][ 2 * j + 1] = v1;
R[2 * i + 1][ 2 * j] = v2;
R[2 * i + 1][ 2 * j + 1] = v3;
});
});
returnR;
};
После выполнение функции parallel_scale выполняется получение битмапа из векторов пикселей, то есть операция, обратная функции make_colors. На вход подается вектора пикселей. Далее происходит сборка битмапа из полученных пикселей. На выход подается изображение.
wxBitmapfrom_colors(constVecOfColors&data)
{
auto w = data.size();
auto h = data.begin()->size();
wxImageimg(w,h);
for(decltype(h) i = 0;i<w;i++)
for(decltype(h) j = 0;j<h;j++)
{
auto temp = data[i][j];
img.SetRGB(i,j,temp.Red(),temp.Green(),temp.Blue());
}
returnwxBitmap(img);
};
В процессе выполнения функции parallel_scale используются вспомогательные функции.
Первая функция distance, которая вычисляет разность двух пикселями по трем цветовым потокам.
Helperdistance(constwxColor&c1,
constwxColor&c2)
{
returnstd::make_tuple(std::sqrt(
std::pow(int(c1.Red())-int(c2.Red()),2)+
std::pow(int(c1.Green())-int(c2.Green()),2)+
std::pow(int(c1.Blue())-int(c2.Blue()),2)),c1,c2);
}
Вторая функция average, которая вычисляет среднее значение для двух пикселей.
wxColor average(constwxColor&c1,
constwxColor&c2)
{
wxColor R;
R.Set(
(int(c1.Red()) + int(c2.Red())) / 2,
(int(c1.Green()) + int(c2.Green())) / 2,
(int(c1.Blue()) + int(c2.Blue())) / 2);
return R;
}
Еще одна функция get_value, которая сначала находит разность двух пикселей с помощью функции distance, а потом выбирает минимальное из четырех получившихся значений и передает это значение на выход.
wxColorget_value(constwxColor&c1,
constwxColor&c2,
constwxColor&c3,
constwxColor&c4)
{
auto d1 = distance( c2, c4);
auto d2 = distance( c3, c4);
auto d3 = distance( c1, c4);
auto d4 = distance( c1, c3);
std::array<Helper,4> d = {d1,d2,d3,d4};
auto it = std::min_element(d.begin(),d.end(),
[](constHelper&a,constHelper&b)
{
return std::get<0>(a)<std::get<0>(b);
});
return average(std::get<1>(*it),std::get<2>(*it));
}
Таким образом были разработаны алгоритмы для масштабирования изображений. Кроме того, алгоритмы были реализованы на языкеC++[11].
3. Демонстрация работы с программой и оценка эффективности полученных алгоритмов.
3.1 Демонстрация работы с программой
При открытии программы открывается вот такое окно. При нажатии на кнопку "Меню" можно увидеть несколько опций для выполнения:
· Открыть изображение для масштабирования.
· Масштабировать изображение.
· Сохранить полученное в результате масштабирования изображение.
При нажатии на кнопку "Настройки" появляется окно, где можно выбрать параметры для масштабирования. Примечательно, что коэффициент для масштабирования должен представлять собой степень двойки из-за особенностей алгоритма направленной интерполяции.
Рис. 3. Интерфейс программы до обработки изображений
Рис. 4. Меню в интерфейсе
Рис. 5. Окно "Настройки".
После загрузки и выполнения операции масштабирования программа выглядит таким образом:
Рис. 6. Выполнение операции масштабирования.
Можно сравнить исходное и конечное изображение.
Рис. 7. Исходное изображение #1
Рис. 8. Изображение #1 увеличенное в два раза.
Рассмотрим еще несколько пар изображений до и после масштабирования.
Рис. 9. Исходное изображение #2
Рис. 10. Изображение #2 увеличенное в два раза
Рис. 11. Исходное изображение #3
Рис. 12. Изображение #3 увеличенное в четыре раза.
Можно заметить насколько четкие получаются изображения. В нужных местах можно заметить размытость, а по краям присутствует резкость. Это придает изображению нужную форму, при этом не ухудшая значительно качество.
3.2 Оценка эффективности алгоритмов
В этом разделе будет проведена сравнительная характеристика прямого и параллельного алгоритма для масштабирования изображений. Эффективность будет оценивать по параметру времени выполнения операции масштабирования.
В первую очередь нужно оценить каким образом влияет начальные данные на время обработки. Сначала возьмем изображение с разрешением и увеличим его в два раза. Таким образом, получается изображение с разрешением . Увеличим полученное изображение снова в два раза и получим изображение с разрешением . Изображение, полученное на этом этапе, также увеличим в два раза. И отследим время, которое затрачивается на каждый из шагов. На рисунке 12 изображена сравнительная характеристика времени выполнения для каждого изображения.
Как можно заметить при малом разрешении затраты на создание потоков превосходят вычислительные затраты для прямого алгоритма. Тем не менее, для большого объема данных можно заметить явно преимущество параллельного алгоритма.
Кроме различных начальных данных, можно рассмотреть производительность каждого из методов для увеличения в больше чем два раза.
Рис.12. График затрат времени на масштабирование изображения в два раза для разных начальных данных
На рисунке 13 изображена диаграмма для увеличения в 2, в 4 и в 16 раз.
Рис. 13 График затрат времени для разных коэффициентов масштабирования.
Ситуация схожа с предыдущей диаграммой. При малом коэффициенте увеличения и при малых объемах начальных данных прямой алгоритм эффективнее чем параллельный. Однако, уже начиная с увеличения в 4 раза можно заметить, что параллельный алгоритм работает быстрее. Можно заметить, что использование метода дает в результате изображения с хорошим качеством. Эффект размытия и резкости присутствует в нужных частях изображения. Кроме того, примечательно отсутствие лестничного эффекта. Можно сделать вывод о том, что при небольшом разрешении и при увеличении на малое количество раз использование параллельного метода будет нецелесообразным, по причине того времени, которое затрачивается на создание потоков.
Заключение
В данной работе были рассмотрены и оценены по вычислительной сложности и по эффективности существующие методы для масштабирования изображений. Был выбран метод направленной интерполяции в силу того факта, что он является эффективным и его вычислительная сложность не высока. Далее был разработан алгоритм с использованием выбранного метода направленной интерполяции и была проведена модификация этого алгоритма с использованием принципов параллелизма. После этого была продемонстрированная реализация программы на языке С++ и показаны выполнения операции масштабирования с использованием этой программы. Кроме того, была оценена эффективность полученного алгоритма по критерию времени выполнения программы и мы пришли к выводу, что использование распараллеленного метода целесообразно только в том случае, если на вход подается большое изображение или же при большом коэффициенте масштабирования.
Список используемой литературы
[1] Doma D. Comparisom of Different Interpolation Algorithms..2008. С.1.
[2][5][7] Егоров И.В., Внуков А.А. Разработка эффективного алгоритма параллельной обработки данных в модуле масштабирования цифровых изображений. 2014. C. 5, 9 - 11.
[3]PhotoshopРуководство пользователя. Основные сведения об изображениях и работе с цветом. URL: https://helpx.adobe.com/ru/photoshop/using/resizing-image.html (дата обращения 24.02.2017)
[4] Zhang L., Wu X. An Edge Guided Image Interpolation Algorithm via Directional Filtering and Data Fusion.IEEE Transactions on Image Processing.Номер. 8.2006.С. 2226-2238.
[6]Getreuer P. Image Interpolation with Contour Stencils.Image Processing On Line. 2011. С. 71.
[8]Carrato S., Tenze L.A High Quality 2Ч image interpolator.Signal Processing Letters. 2000.С. 132 -134.
[9]Shezaf N.,Abramov-Segal H., Sutskover I., Bar-Sella R. Adaptive Low Complexity Algorithm for Image Zooming at Fractional Scaling Ratio. Proceedings of the 21st IEEE Convention of the Electrical and Electronic Engineers in Israel.2000. C. 253-256.
[10] Visual C++ 2010 ПолныйКурс. ТригубС.Н., ПоповаИ.Л., ПавлюгпинВ.П. М.,СПб., Киев. Диалектика. 2011.
[11] Smart G., Hock K. Cross-Platform GUI Programming with wxWidgets. 2005. C. 285,270,141.
Приложение 1
Примеры работы методов для масштабирования изображений. Овощи.
Оригинальное изображение
Метод ближайшего соседа
Билинейная интерполяция
Бикубическая интерполяция
Приложение 2
Примеры работы методов для масштабирования изображений. Барбара.
Оригинальное изображение
Метод ближайшего соседа
Билинейная интерполяция
Бикубическая интерполяция
Размещено на Allbest.ru
Подобные документы
Анализ существующих методов масштабирования изображений. Повышение скорости обработки и изменения картинок. Алгоритм масштабирования с использованием параллелизма. Отбор пикселей для правильного расчета градиента. Выбор метода интерполяции изображения.
курсовая работа [5,8 M], добавлен 17.06.2017Проблема улучшения качества отпечатков пальца с целью повышения эффективности работы алгоритмов биометрической аутентификации. Обзор алгоритмов обработки изображений отпечатков пальцев. Анализ алгоритма, основанного на использовании преобразования Габора.
дипломная работа [4,5 M], добавлен 16.07.2014Сравнительная оценка существующих программ, повышающих разрешение изображений на языке Borland Delphi. Выбор оптимального инструментария для разработки логической схемы. Форма поиска файлов, преобразования изображений и реализации алгоритмов интерполяции.
дипломная работа [3,0 M], добавлен 29.11.2011Изучение современных методик компьютерной обработки биомедицинских изображений с целью улучшения изображений для их наилучшего визуального восприятия врачом-диагностом и эффективного сжатия изображений – для надежного хранения и быстрой передачи данных.
курсовая работа [2,3 M], добавлен 15.04.2019Выбор методов обработки и сегментации изображений. Математические основы примененных фильтров. Гистограмма яркости изображения. Программная реализация комплексного метода обработки изображений. Тестирование разработанного программного обеспечения.
курсовая работа [1,3 M], добавлен 18.01.2017Типы изображений (черно-белые, полутоновые, цветные) и их форматы. Устройства, создающие цифровые изображения, и их параметры. Применение и характеристики методов сжатия изображений. Поиск по содержимому в базах данных изображений. Структуры баз данных.
презентация [360,4 K], добавлен 11.10.2013Исследование структуры типовой вычислительной сети. Модель процесса вскрытия вычислительной сети и взаимосвязь основных его этапов. Конфликт в информационной сфере между субъектом и объектом познания. Описания алгоритмов динамического масштабирования.
дипломная работа [2,9 M], добавлен 21.12.2012Исследование вертикальных проекций яркости и размаха яркости. Программная реализация алгоритма автоматического анализа цифровых изображений номерных знаков с целью сегментации цифробуквенных символов. Разработка графического пользовательского интерфейса.
дипломная работа [1,5 M], добавлен 12.04.2013Обзор существующего программного обеспечения для автоматизации выделения границ на изображении. Разработка математической модели обработки изображений и выделения контуров в оттенках серого и программного обеспечения для алгоритмов обработки изображений.
дипломная работа [1,7 M], добавлен 27.03.2013Анализ средств построения динамически масштабируемых ВС. Разработка алгоритма, обеспечивающего устойчивость функционирования информационно-вычислительных сетей в условиях воздействий компьютерных атак, использующих фрагментированные пакеты сообщений.
дипломная работа [3,8 M], добавлен 21.12.2012