Как стать автором
Обновить
13
0
Marat Kiniabulatov @Eskimo

Agile Delivery Manager, Technical Program Manager

Отправить сообщение

Идентификация пользователя по голосу

Время на прочтение12 мин
Количество просмотров60K
Продолжая тему распознавания голоса, хочу поделится своей старой дипломной работой, на которую одно время возлагал надежды по доведению до коммерческого продукта, но потом оставил этот проект, выложив его в сеть на радость другим студентам. Хотя возможно эта тема будет интересна не только в академическом ключе, а и для общего развития.

Тема моей дипломной работы была «Разработка подсистемы САПР защиты от несанкционированного доступа на основе нейросетевого анализа спектральных характеристик голоса». В самом дипломе конечно много воды вроде ТБ, экономики и прочего, но есть и математическая и практическая часть, а также анализ существующих аналогичных решений. В конце выложу программу и сам диплом, возможно еще кому-то пригодится.

Итак, зачем вообще это нужно?
Основным способом персонификации пользователя является указание его сетевого имени и пароля. Опасности, связанные с использованием пароля, хорошо известны: пароли забывают, хранят в неподходящем месте, наконец, их могут просто украсть. Некоторые пользователи записывают пароль на бумаге и держат эти записи рядом со своими рабочими станциями. Как сообщают группы информационных технологий многих компаний, большая часть звонков в службу поддержки связана с забытыми или утратившими силу паролями.

Метод работы существующих систем.
Большинство биометрических систем безопасности функционируют следующим образом: в базе данных системы хранится цифровой отпечаток пальца, радужной оболочки глаза или голоса. Человек, собирающийся получить доступ к компьютерной сети, с помощью микрофона, сканера отпечатков пальцев или других устройств вводит информацию о себе в систему. Поступившие данные сравниваются с образцом, хранимым в базе данных.

При распознавании образца проводится процесс, первым шагом которого является первоначальное трансформирование вводимой информации для сокращения обрабатываемого объема так, чтобы ее можно было бы подвергнуть анализу. Следующим этапом является спектральное представление речи, получившееся путем преобразования Фурье. Спектральное представление достигнуто путем использования широко-частотного анализа записи.

Хотя спектральное представление речи очень полезно, необходимо помнить, что изучаемый сигнал весьма разнообразен.
Разнообразие возникает по многим причинам, включая:
— различия человеческих голосов;
— уровень речи говорящего;
— вариации в произношении;
— нормальное варьирование движения артикуляторов (языка, губ, челюсти, нёба).

Затем определяются конечные выходные параметры для варьирования голоса и производится нормализация для составления шкалы параметров, а также для определения ситуационного уровня речи. Вышеописанные измененные параметры используются затем для создания шаблона. Шаблон включается в словарь, который характеризует произнесение звуков при передаче информации говорящим, использующим эту систему. Далее в процессе распознавания новых речевых образцов (уже подвергшихся нормализации и получивших свои параметры), эти образцы сравниваются с шаблонами, уже имеющимися в базе, используя динамичное искажение и похожие метрические измерения.

Возможность использования нейросетей для построения системы распознавания речи
Любой речевой сигнал можно представить как вектор в каком-либо параметрическом пространстве, затем этот вектор может быть запомнен в нейросети. Одна из моделей нейросети, обучающаяся без учителя – это самоорганизующаяся карта признаков Кохонена. В ней для множества входных сигналов формируется нейронные ансамбли, представляющие эти сигналы. Этот алгоритм обладает способностью к статистическому усреднению, т.е. решается проблема с вариативностью речи. Как и многие другие нейросетевые алгоритмы, он осуществляет параллельную обработку информации, т.е. одновременно работают все нейроны. Тем самым решается проблема со скоростью распознавания – обычно время работы нейросети составляет несколько итераций.

Практическая работа используемого алгоритма

Процесс сравнивания образцов состоит из следующих стадий:
— фильтрация шумов;
— спектральное преобразование сигнала;
— постфильтрация спектра;
— лифтеринг;
— наложение окна Кайзера;
— сравнение.

Фильтрация шумов
Звук, образованный колебаниями всего диапазона частот, подобный тому, спектр которого показан на рисунке, называется шумом.


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

где Xi – набор дискретных значений звукового сигнала.
После обработки в сигнале ищется начало и конец записи, а так как шумы уже отфильтрованы, то начало фрагмента будет характеризоваться всплеском сигнала, если искать с Х0. Соответственно если искать с Хn вниз, то всплеск будет характеризовать конец фрагмента. Таким образом получим начала и конца фрагмента в массиве дискретных значений сигнала. В нематематическом виде это означает, что мы нашли слово сказанное пользователем в микрофон, которое нужно усреднить с другими характеристиками голоса.
Помимо высоты тона человек ощущает и другую характеристику звука — громкость. Физические величины, наиболее точно соответствующие громкости, — это шоковое давление (для звуков в воздухе) и амплитуда (для цифрового или электронного представления звука).

Если говорить об оцифрованном сигнале, то амплитуда — это значение выборки. Анализируя миллионы дискретных значений уровня одного и того же звука, можно сказать о пиковой амплитуде, то есть об абсолютной величине максимального из полученных дискретных значений уровня звука. Чтобы избежать искажения, вызванного искажением ограничения сигнала при цифровой записи звука (данное искажение возникает в том случае, если величина пиковой амплитуды выходит за границы, определяемые форматом хранения данных), необходимо обратить внимание на величину пиковой амплитуды. При этом нужно сохранять отношение сигнал/шум на максимально достижимом уровне.
Основной причиной разной громкости звуков является различное давление, оказываемое ими на уши. Можно сказать, что волны давления обладают различными уровнями мощности. Волны, несущие большую мощность, с большей силой оказывают воздействие на механизм ушей. Электрические сигналы, идущие по проводам, также передают мощность. По проводам звук обычно передается в виде переменного напряжения, и мгновенная мощность этого звука пропорциональна квадрату напряжения. Чтобы определить полную мощность за период времени, необходимо просуммировать все значения моментальной мощности за этот период.
На языке математики это описывается интегралом , где — это напряжение в заданный момент времени.

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

Так как моментальная мощность зависит от квадрата моментальной амплитуды, имеет смысл аналогичным образом подобрать похожее соотношение, связывающее среднюю амплитуду и среднюю мощность. Способ, которым это можно сделать, заключается в определении средней амплитуды (СКЗ). Вместо того, чтобы вычислять среднее значение непосредственно амплитуды, мы сначала возводим в квадрат полученные значения, вычисляем среднее значение получившегося множества, а затем извлекаем из него корень. Метод СКЗ применяется в том случае, когда необходимо вычислить среднее для быстро меняющейся величины. Алгебраически это выражается следующим ооразом: пусть у нас N значений и х(i) это амплитуда i-ого дискретного значения. Тогда СКЗ амплитуды =

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

Относительная мощность измеряется в белах, а чаще в децибелах (дБ, децибел, это одна десятая бела). Чтобы сравнить два звука, берется отношение их мощности. Десятичный логарифм этого отношения и есть различие в белах; если множить получившееся число на десять, то получится значение в децибелах. Например, если мощность одного сигнала превосходит мощность другого в два раза, то первый сигнал будет громче на 10lоg10(2) = 3,01 дБ.

Спектральное преобразование сигнала

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

Фазовые изменения часто происходят по причине временных задержек. Например, каждый цикл сигнала в 1000 Гц занимает 1/1000 секунды. Если задержать сигнал на 1/2000 секунды (полупериод), то получится 180-градусный сдвиг но фазе. Заметим, что этот эффект опирается на зависимость между частотой и временной задержкой. Если сигнал в 250 Гц задержать на те же самые 1/2000 секунды, то будет реализован 45-градусный сдвиг по фазе.

Если сложить вместе две синусоидальные волны одинаковой частоты, то получится новая синусоидальная волна той же частоты. Это будет верно даже в том случае, если два исходных сигнала имеют разные амплитуды и фазы. Например, Asin(2 Pi ft) и Bcos(2 Pi ft) две синусоиды с разными амплитудами и фазами, но I c одинаковой частотой.

Для измерения амплитуды одной частоты нужно умножить имеющийся сигнал на синусоиду той же частоты и сложить полученные отсчеты.
Чтобы записать это в символьном виде, предположим, что отсчеты имеют значения s0, s1, …, st, …. Переменная t представляет собой номер отсчета (который заменяет значение времени). Измеряется амплитуду частоты f в первом приближении, при вычислении следующей суммы:

Значения t и f не соответствуют в точности времени и частоте. Более того, f – целое число, а реальная исследуемая частота – это частота дискретизации, умноженная на f/N. Подобным образом, t — это целочисленный номер отсчета. Кроме того, суммирование дает не непосредственное значение амплитуды, а всего лишь число, пропорциональное амплитуде.

Если повторить эти вычисления для различных значений f, то можно измерить амплитуду всех частот в сигнале. Для любого целого f меньшего N легко определяется значение Аf, представляющее амплитуду соответствующей частоты как долю от общего сигнала. Эти значения могут быть вычислены по той же формуле:


Если мы знаем значения Af мы можем восстановить отсчеты. Для восстановления сигнала необходимо сложить все значения для разных частот. Чтобы осуществлять точное обратное преобразование Фурье, помимо амплитуды и частоты необходимо измерять фазу каждой частоты.

Для этого нужны комплексные числа. Можно изменить описанный ранее метод вычислений так, что он будет давать двумерный результат. Простое коми1 лексное число – это двумерное значение, поэтому оно одновременно но представляет и амплитуду, и фазу.
При таком подходе фазовая часть вычисляется неявно. Вместо амплитуды и фазы измеряется две амплитуды, соответствующие разным фазам. Одна из этих фаз представляется косинусом (соs()), другая синусом sin()).
Используя комплексные числа, можно проводить измерения одновременно, умножая синусную часть на -i.

Каждое значение Af теперь представляется комплексным числом; действительная и мнимая части задают амплитуду двух синусоидальных волн с разным фазами.

Основная идея быстрого преобразования Фурье заключается в том, что каждую вторую выборку можно использовать для получения половинного спектра. Формально это означает, что формула дискретного преобразования Фурье может быть представлена в виде двух сумм. Первая содержит все четные компоненты оригинала, вторая — все нечетные


Фильтрация спектра.
Получив спектральное представление сигнала его требуется отчистить от шумов. Человеческий голос обладает известными характеристиками, и поэтому те области которые не могут являются характеристиками голоса нужно погасить. Для этого применим функцию, которая получила название «окно Кайзера»
окно Кайзера
окно Кайзера
После фильтрации спектра наложим окно Ханнинга
окно Кайзера

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

Для сравнения двух фрагментов использовался следующий подход:
Предположим что X[1..N] и Y[1..N] массивы чисел, одинакового размера N, содержащие значения спектральной мощности первого и второго фрагментов соответственно. Тогда мера сходства между ними вычисляется по следующей формуле:

где Mx и My математические ожидания для массивов X[] и Y[] соответственно, вычисляющиеся по следующей формуле:

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

Нейросетевое сравнение на основе простых персептронов

Несмотря на большое разнообразие вариантов нейронных сетей, все они имеют общие черты. Так, все они, так же, как и мозг человека, состоят из большого числа связанных между собой однотипных элементов – нейронов, которые имитируют нейроны головного мозга. На рисунке показана схема нейрона.
схема нейрона
Из рисунка видно, что искусственный нейрон, так же, как и живой, состоит из синапсов, связывающих входы нейрона с ядром; ядра нейрона, которое осуществляет обработку входных сигналов и аксона, который связывает нейрон с нейронами следующего слоя. Каждый синапс имеет вес, который определяет, насколько соответствующий вход нейрона влияет на его состояние. Состояние нейрона определяется по формуле

где n – число входов нейрона, xi – значение i-го входа нейрона, wi – вес i-го синапса
Затем определяется значение аксона нейрона по формуле: Y = f(S) где f – некоторая функция, которая называется активационной. Наиболее часто в качестве активационной функции используется так называемый сигмоид, который имеет следующий вид:

Основное достоинство этой функции в том, что она дифференцируема на всей оси абсцисс и имеет очень простую производную:

При уменьшении параметра α сигмоид становится более пологим, вырождаясь в горизонтальную линию на уровне 0,5 при α=0. При увеличении a сигмоид все больше приближается к функции единичного скачка.

Обучение сети
Для автоматического функционирования системы был выбран метод обучения сети без учителя. Обучение без учителя является намного более правдоподобной моделью обучения в биологической системе. Развитая Кохоненом и многими другими, она не нуждается в целевом векторе для выходов и, следовательно, не требует сравнения с предопределенными идеальными ответами. Обучающее множество состоит лишь из входных векторов. Обучающий алгоритм подстраивает веса сети так, чтобы получались согласованные выходные векторы, т. е. чтобы предъявление достаточно близких входных векторов давало одинаковые выходы.
Персептрон обучают, подавая множество образов по одному на его вход и подстраивая веса до тех пор, пока для всех образов не будет достигнут требуемый выход. Допустим, что входные образы нанесены на демонстрационные карты. Каждая карта разбита на квадраты и от каждого квадрата на персептрон подается вход. Если в квадрате имеется линия, то от него подается единица, в противном случае ноль. Множество квадратов на карте задает, таким образом, множество нулей и единиц, которое и подается на входы персептрона. Цель состоит в том, чтобы научить персептрон включать индикатор при подаче на него множества входов, задающих нечетное число, и не включать в случае четного.
Для обучения сети образ X подается на вход и вычисляется выход У. Если У правилен, то ничего не меняется. Однако если выход неправилен, то веса, присоединенные к входам, усиливающим ошибочный результат, модифицируются, чтобы уменьшить ошибку.
Информативность различных частей спектра неодинакова: в низкочастотной области содержится больше информации, чем в высокочастотной. Поэтому для предотвращения излишнего расходования входов нейросети необходимо уменьшить число элементов, получающих информацию с высокочастотной области, или, что тоже самое, сжать высокочастотную область спектра в пространстве частот.
Наиболее распространенный метод — логарифмическое сжатие

где f — частота в спектре Гц, m — частота в новом сжатом частотном пространстве

Такое преобразование имеет смысл только если число элементов на входе нейросети NI меньше числа элементов спектра NS.
После нормирования и сжатия спектр накладывается на вход нейросети. Вход нейросети — это линейно упорядоченный массив элементов, которым присваиваются уровни соответствующих частот в спектре. Эти элементы не выполняют никаких решающих функций, а только передают сигналы дальше в нейросеть. Выбор числа входов — сложная задача, потому что при малом размере входного вектора возможна потеря важной для распознавания информации, а при большом существенно повышается сложность вычислений ( при моделировании на PC, в реальных нейросетях это неверно, т.к. все элементы работают параллельно ).
При большой разрешающей способности (числе) входов возможно выделение гармонической структуры речи и как следствие определение высоты голоса. При малой разрешающей способности (числе) входов возможно только определение формантной структуры.

Как показало дальнейшее исследование этой проблемы, для распознавания уже достаточно только информации о формантной структуре. Фактически, человек одинаково распознает нормальную голосовую речь и шепот, хотя в последнем отсутствует голосовой источник. Голосовой источник дает дополнительную информацию в виде интонации (высоты тона на протяжении высказывания ), и эта информация очень важна на высших уровнях обработки речи. Но в первом приближении можно ограничиться только получением формантной структуры, и для этого с учетом сжатия неинформативной части спектра достаточное число входов выбрано в пределах 50~100.
Наложение спектра на каждый входной элемент происходит путем усреднения данных из некоторой окрестности, центром которой является проекция положения этого элемента в векторе входов на вектор спектра. Радиус окрестности выбирается таким, чтобы окрестности соседних элементов перекрывались. Этот прием часто используется при растяжении векторов, предотвращая выпадение данных.

Тестирование алгоритма
Тестирование производилось с 8 пользователями. Каждый голос сначала сравнивался с эталонным, то есть голосом разработчика, а потом между собой, для того что бы выяснить как поведет себя система на однотипных голосах.
Читать дальше →
Всего голосов 65: ↑62 и ↓3+59
Комментарии29

Нейронные сети для чайников. Сеть Кохонена

Время на прочтение3 мин
Количество просмотров347K
В статье Нейросети для чайников. Начало автор Paul_Smith доступно показал насколько просто создать нейронную сеть для распознования картинок. Но есть одно но — то что он описал нейронной сетью не является. Перед его следующей статьей хочу рассказать вам как решить ту же задачу, но с использованием нейронной сети Кохонена.

Итак, распознавать мы будем цифры, написанные белым по черному, такие как эти:
image image image image image image
Читать дальше →
Всего голосов 107: ↑101 и ↓6+95
Комментарии61

Нейросети для чайников. Начало

Время на прочтение5 мин
Количество просмотров801K


Так получилось, что в университете тема нейросетей успешно прошла мимо моей специальности, несмотря на огромный интерес с моей стороны. Попытки самообразования несколько раз разбивались невежественным челом о несокрушимые стены цитадели науки в облике непонятных «с наскока» терминов и путанных объяснений сухим языком вузовских учебников.

В данной статье (цикле статей?) я попытаюсь осветить тему нейросетей с точки зрения человека непосвященного, простым языком, на простых примерах, раскладывая все по полочкам, а не «массив нейронов образует перцептрон, работающий по известной, зарекомендовавшей себя схеме».

Заинтересовавшихся прошу под кат.
Читать дальше →
Всего голосов 258: ↑226 и ↓32+194
Комментарии91

Магистратура по теоретической информатике, Академический Университет (РАН)

Время на прочтение4 мин
Количество просмотров5.7K
image

В Санкт-Петербурге есть замечательное место, где из программистов делают ученых — теоретиков Computer Science. Это Академический Университет Российской Академии Наук (АУ РАН).

На тот момент, когда я поступила на Теоретическое Отделение кафедры Математических и Информационных Технологий АУ, отделение имело только один выпуск, состоящий из двух человек. Сейчас Академический Университет уже заработал себя прекрасное имя. Его выпускники работают в ведущих компаниях города, он принимает студентов из других городов, обеспечивая их жильем, а платное отделение стоит всего-навсего 10 тыс. рублей в семестр.

Но я хочу рассказать, на своем примере, какие интересные и глубокие проблемы можно исследовать и сколько интересного узнать, если вы станете студентом теоретического отделения.
Читать дальше →
Всего голосов 68: ↑57 и ↓11+46
Комментарии55

Шпаргалки для тех, кто делает первые шаги

Время на прочтение1 мин
Количество просмотров31K


На картинке фрагмент отличной шпаргалки, где собраны основные электронные компоненты — их внешний вид и обозначения на принципиальных схемах.

Шпаргалка по электронным компонентам (PDF, 168Kb)
Шпаргалка по контроллерам AVR (ч.1) (PDF, 61Kb)
Шпаргалка по контроллерам AVR (ч.2) (PDF, 61Kb)

PS: Там же, на сайте, имеется любопытный блог с описанием эффектных электронных поделок. Культура исполнения на высоте, приведены ссылки на open source прошивки.
Всего голосов 135: ↑130 и ↓5+125
Комментарии42

Паттерны Визуализации Информации

Время на прочтение7 мин
Количество просмотров20K
Пару лет назад я сильно заинтересовался UX и всем, что с ним связано. Постепенно пришло понимание, насколько важна визуализация информации, особенно сейчас. Прочитав Тафти, Кливеленда и Бертена, просто невозможно не думать в этом направлении. Постоянно приходят в голову идеи, как сделать вещи (в частности, в нашем продукте) более визуальными, более понятными.

Ниже я попытался показать, почему визуализация информации важна, рассказать о ее базовых принципах и показать несколько классных примеров. Заранее прошу прощения за парочку скучных определений и отсутствие шуток в статье. Это сделано намеренно. Статья дэдли сериоус.

И, как обычно, прощу прощения за объем статьи. Но, надеюсь, вам будет интересно дочитать до конца.



Узнать интригующие подробности
Всего голосов 96: ↑92 и ↓4+88
Комментарии25

Взгляд изнутри: LCD и E-Ink дисплеи

Время на прочтение12 мин
Количество просмотров215K


Demain n'existe pas!

В последней статье из серии «Взгляд изнутри» речь зашла о повседневных вещах, но, не смотря на обилие материала, полученного в этом направлении в течение прошедшего месяца, всё-таки давайте вернёмся к тематике, связанной с IT.

Специально ко Дню Защитника Отечества на препарационный стол легли LCD и E-Ink дисплеи, которые, так или иначе, достались мне в несколько побитом жизнью виде.

Как Антон кидал телефон об стену, а также о результатах скрупулёзного разбора дисплеев читайте под катом.
Хочу посмотреть на это!
Всего голосов 355: ↑354 и ↓1+353
Комментарии43

Манипулируем System.Drawing.Bitmap

Время на прочтение5 мин
Количество просмотров49K
Класс System.Drawing.Bitmap очень полезен в инфраструктуре .NET, т.к. позволяет считывать и сохранять файлы различных графических форматов. Единственная проблема – это то, что он не очень полезен для попиксельной обработки – например если нужно перевести битмап в ч/б. Под катом – небольшой этюд на эту тему.
Читать дальше...
Всего голосов 38: ↑28 и ↓10+18
Комментарии54

The Foundry Nuke. Введение

Время на прочтение9 мин
Количество просмотров66K


большое разрешение — по клику

Снова здравствуй, Хабр!

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

Если описать в двух предложениях, то Нюк является мировым стандартом в композитинге и пост-обработке, и был одним из ключевых инструментов в подавляющем большинстве голливудских фильмов с бюджетом, отличным от кустарного.
Да что вообще говорить — Аватар, Трон: Наследие, Трансформеры, Watchmen, Властелины Колец, и большинство остальных голливудских блокбастеров были сделаны именно в Нюке.

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

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

В процессе написания поста я понял, что все, что я хотел бы описать, просто не уместится ни в один пост, ни в цикл статей. Хоть пост и получился длинным, но это вершина айсберга — в нем описывается чуть менее 0.01% всего, чем хочется поделиться.

Интересно?
Добро пожаловать под кат! Осторожно! Много трафика, Джобса, чайников, и надкусанных НЛО.

Читать дальше →
Всего голосов 331: ↑320 и ↓11+309
Комментарии96

Папоротники как метод распознавания образов

Время на прочтение5 мин
Количество просмотров8.5K
        Доброго времени суток!
        Как известно, одной из важных задач, решаемых обработкой изображений (помимо сброса пары кг и укрывания дефектов кожи на аватарках), является поиск и распознавание нужных нам объектов на сцене. Но этот процесс весьма сложный и ресурсоемкий, что делает его неприменимым в системах реального времени. Сегодня мы и поговорим, нельзя ли каким-то образом решить эту проблему и ускорить процесс поиска нужного объекта на сцене, с минимальными потерями в точности (а может, и без них вовсе). И вообще, причем тут папоротники?
PS
Традиционно много картинок.
Читать дальше →
Всего голосов 36: ↑35 и ↓1+34
Комментарии11

Восстановление расфокусированных и смазанных изображений

Время на прочтение10 мин
Количество просмотров221K
Восстановление искаженных изображений является одной из наиболее интересных и важных проблем в задачах обработки изображений – как с теоретической, так и с практической точек зрения. Частными случаями являются размытие из-за неправильного фокуса и смаз – эти дефекты, с которым каждый из вас хорошо знаком, очень сложны в исправлении – именно они и выбраны темой статьи. С остальными искажениями (шум, неправильная экспозиция, дисторсия) человечество научилось эффективно бороться, соответствующие инструменты есть в каждом уважающем себя фоторедакторе.

Почему же для устранения смаза и расфокусировки практически ничего нету (unsharp mask не в счет) – может быть это в принципе невозможно? На самом деле возможно – соответствующий математический аппарат начал разрабатываться примерно 70 лет назад, но, как и для многих других алгоритмов обработки изображений, все это нашло широкое применение только в недавнее время. Вот, в качестве демонстрации вау-эффекта, пара картинок:



Я не стал использовать замученную Лену, а нашел свою фотку Венеции. Правое изображение честно получено из левого, причем без использования ухищрений типа 48-битного формата (в этом случае будет 100% восстановление исходного изображения) – слева самый обычный PNG, размытый искусственно. Результат впечатляет… но на практике не все так просто. Под катом подробный обзор теории и практические результаты.
Осторожно, много картинок в формате PNG!
Читать дальше →
Всего голосов 291: ↑289 и ↓2+287
Комментарии93

Погода для Windows Phone 7. Работа с XML

Время на прочтение14 мин
Количество просмотров8.6K
Об авторе: Паси Маннинен разрабатывает мобильные и веб-приложения, является Чемпионом Nokia Developer и Профессионалом Adobe Community, сертифицированным экспертом и преподавателем Adobe по Flex, Flash и Flash Mobile. Окончил магистратуру Университета Ювяскюля (одного из крупнейших вузов Финляндии) по специальностям «Прикладная математика» и «Компьютерные науки».

Эта статья рассказывает, как работать с данными XML на примере приложения, отображающего прогноз погоды в любых городах мира.

Вступление


В этой статье я покажу как создать приложение для Window Phone 7, которое загружает прогноз погоды из службы World Weather Online. Вы можете почитать интересную статью по работе с Weather Online, но я хочу углубиться именно в принципы хранения избранных городов в телефоне и методику создания панорамного режима просмотра прогноза погоды для различных городов.



Приложение выполнено в виде панорамы для WP7. Сначала приложение загружает сохранённый список городов и API-ключ для доступа к Weather Online из памяти устройства, после чего получает прогноз погоды для всех городов. Каждый прогноз отображается в собственном Panorama View. Пользователь же может указать ApiKey и избранные города на странице настроек.

API-ключ для Weather Online


Вам будет нужен ваш собственный API-ключ для доступа к Weather Online. Из соответствующей статьи можно узнать, как это сделать.

Windows Phone 7.1 SDK


Для разработки приложений под устройства Windows Phone 7 нужно установить соответствующий SDK. Загрузить последнюю версию SDK для Windows Phone можно здесь.

Читать дальше →
Всего голосов 21: ↑13 и ↓8+5
Комментарии0

Дайджест новых материалов на русском MSDN за январь

Время на прочтение2 мин
Количество просмотров8.7K


Уважаемые хабрачитатели!

Вашему вниманию предлагаем подборку материалов, опубликованных на русском MSDN за январь. В сегодняшнем дайджесте более 35 технических статей по Visual Studio, облачным вычислениям, Windows Phone 7, ASP.Net и многому другому. Под катом полный список со ссылками.
Читать дальше →
Всего голосов 22: ↑17 и ↓5+12
Комментарии2

Магистратура и аспирантура в Японии: 2012

Время на прочтение1 мин
Количество просмотров20K
Казалось, совсем недавно я писал о возможности пройти обучение в японской магистратуре или в аспирантуре. Однако прошли новогодние праздники, а с ними пришли новые известия, с которыми я и хочу ознакомить всех интересующихся в этой короткой заметке (даже ката не потребуется!):
  1. Похоже, один из хабрачитателей таки стал нашим магистрантом (по моей рекомендации) в этом году! Подробностей пока не будет — боюсь спугнуть. Ещё в одной инстанции его заявку должны завизировать. Если всё получится, попрошу написать его о впечатлениях.
  2. В апреле открывается общий приём заявок через посольства. Доступны магистратура и аспирантура, а также базовое высшее образование. Честно говоря, я и не знал, что к нам можно ехать сразу после школы, но оказывается, есть и такая программа. Впрочем, не уверен, стоит ли её советовать — чем меньше у кандидата образования, тем больше «лотерейности», поскольку неясно, как хороших отсеивать от не очень хороших.
  3. Стипендия для магистрантов составляет 152 тыс. иен, т.е. примерно 60 тыс. рублей по нынешнему курсу. Для докторантов чуть побольше, для бакалавриата — поменьше. Все стипендиаты освобождаются от платы за обучение. Кроме того, за счёт Японии оплачивается авиаперелёт.
  4. Все требуемые документы можно оформить за две недели. Исключение — сертификат TOEFL. Он необязателен, но очень желателен.
Разумеется, вы можете планировать учёбу в любом японском вузе, но я как патриот своего заведения буду агитировать за него. Как обычно, буду рад ответить на любые вопросы. Только читайте, пожалуйста, сначала мои посты и побродите по ссылкам. А то в прошлый раз было уж очень много вопросов, ответы на которые и так уже были даны в тексте.
Читать дальше →
Всего голосов 57: ↑53 и ↓4+49
Комментарии50

Разработка 2D игр под Windows и HTML5 без программирования

Время на прочтение4 мин
Количество просмотров38K
image

Привет Хабраюзеры!

Сегодня я хочу представить вашему вниманию замечательный конструктор 2D игр (для Windows и в частности для HTML5) Scirra Construct.

Основным плюсом данного конструктора является то, что для создания игр не требуется никаких знаний языков программирования, все делается посредством построения действий во встроенной системе событий.
Читать дальше →
Всего голосов 102: ↑90 и ↓12+78
Комментарии49

Сети для самых маленьких. Часть нулевая. Планирование

Время на прочтение7 мин
Количество просмотров2.1M
Это первая статья из серии «Сети для самых маленьких». Мы с товарищем thegluck долго думали с чего начать: маршрутизация, VLAN'ы, настройка оборудования.
В итоге решили начать с вещи фундаментальной и, можно сказать, самой важной: планирование. Поскольку цикл рассчитан на совсем новичков, то и пройдём весь путь от начала до конца.

Предполагается, что вы, как минимум читали о эталонной модели OSI (то же на англ.), о стеке протоколов TCP/IP (англ.), знаете о типах существующих VLAN’ов (эту статью я настоятельно рекомендую к прочтению), о наиболее популярном сейчас port-based VLAN и о IP адресах (более подробно). Мы понимаем, что для новичков «OSI» и «TCP/IP» — это страшные слова. Но не переживайте, не для того, чтобы запугать вас, мы их используем. Это то, с чем вам придётся встречаться каждый день, поэтому в течение этого цикла мы постараемся раскрыть их смысл и отношение к реальности.

Схема сети

Начнём с постановки задачи. Есть некая фирма, занимающаяся, допустим, производством лифтов, идущих только вверх, и потому называется ООО «Лифт ми ап». Расположены они в старом здании на Арбате, и сгнившие провода, воткнутые в пожжёные и прожжёные коммутаторы времён 10Base-T не ожидают подключения новых серверов по гигабитным карточкам. Итак у них катастрофическая потребность в сетевой инфраструктуре и денег куры не клюют, что даёт вам возможность безграничного выбора. Это чудесный сон любого инженера. А вы вчера выдержали собеседование и в сложной борьбе по праву получили должность сетевого администратора. И теперь вы в ней первый и единственный в своём роде. Поздравляем! Что дальше?
Читать дальше →
Всего голосов 104: ↑100 и ↓4+96
Комментарии134

И снова скриншоты в один клик (C#)

Время на прочтение4 мин
Количество просмотров28K

Синопсис


Не так давно начал изучать C# и очень скоро эксперименты переросли в желание написать какое-нибудь легкое, простое, но вместе с тем полезное и удобное приложение. Постепенно родилась идея программы, предназначенной для быстрого снятия скриншотов и автоматической загрузки их на хостинг. Удовлетворяющих моим требованиям аналогов я не нашел, поэтому я решил все же сделать её самостоятельно, а уже после этого один хороший человек подал идею написать статью об этом.
Читать дальше →
Всего голосов 40: ↑30 и ↓10+20
Комментарии39

Линейная алгебра для разработчиков игр

Время на прочтение19 мин
Количество просмотров771K
Эта статья является переводом цикла из четырёх статей «Linear algebra for game developers», написанных David Rosen и посвящённых линейной алгебре и её применению в разработке игр. С оригинальными статьями можно ознакомиться тут: часть 1, часть 2, часть 3 и часть 4. Я не стал публиковать переводы отдельными топиками, а объединил все статьи в одну. Думаю, что так будет удобнее воспринимать материал и работать с ним. Итак приступим.
Читать дальше →
Всего голосов 314: ↑296 и ↓18+278
Комментарии61

Новый курс по разработке под Windows Phone, обновление центра Windows Phone и все-все-все …

Время на прочтение3 мин
Количество просмотров3.9K


Каждый раз, когда я собираюсь писать статью, особенно если она часть курса, я пытаюсь понять, кому она будет нужна и как её будут использовать. И когда коллеги предложили мне взяться за написание небольшого вводного курса по разработке под Windows Phone, первое, что я сделал, я просмотрел все доступные материалы претендующие на роль обучающего курса или книги. Несмотря на то, что платформа Windows Phone достаточно молодая, материалов по ней, как русскоязычных так и англоязычных великое множество.
Читать дальше →
Всего голосов 77: ↑61 и ↓16+45
Комментарии14

Библиотеки для визуализации данных в вебе

Время на прочтение1 мин
Количество просмотров7.7K
Тема визуализации данных в интернете для меня достаточно актуальная, поэтому периодически мне приходится искать различные библиотеки для отображение тех или иных данных в вебе.



К таким библиотекам я отношу визуализацию графиков, чартов, графов, таблиц, отчетов, инфографик и т.д.

В свое время я написал несколько статей на тему визуализации данных в вебе (их можно поискать на хабре по ключевой фразе «Визуализация данных в вебе»).

Но с тех пор появилось много новых инструментов, мы получили HTML5 и т.д., поэтому вопрос опять стоит достаточно остро. Я решил собрать информацию о всех JavaScript инструментах, с помощью которых можно визуализировать данные в вебе (в первую очередь для себя, но потом решил, что, возможно, будет интересно это и другим). Я уже начал собирать информацию в виде списка инструментов с примерами в одном месте для того, чтобы не бегать по разным сайтам в поисках демок и описания функционала. Есть уже около 10 библиотек.
Читать дальше →
Всего голосов 65: ↑56 и ↓9+47
Комментарии18

Информация

В рейтинге
Не участвует
Откуда
Уфа, Башкортостан(Башкирия), Россия
Дата рождения
Зарегистрирован
Активность