Как стать автором
Обновить

Комментарии 48

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

Вообще получается что именно так. Исходная картинка — цифровая информация. Записанная голограмма — считай аналоговая. По крайней мере если бы была аналоговой, то качество восстановления исходного образа было бы гораздо лучше.
Если мы собираемся хранить звук, например, то у нас всегда есть два варианта, хранить его (на голограмме) в цифровом или аналоговом виде.

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

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

В общем эксперимент интересный, но проведён совершенно неправильно. Звук, я полагаю, при аналоговой передаче будет сильно искажён, интересно насколько. А в цифровом виде хранить, конечно, получится, но, наверное, не очень много данных. Нет возможности поставить реальный эксперимент, а не умозрительный?
Про численное моделирование, забыл добавить. Дело не только в типе данных (int -> double), дело в том, что надо смоделировать непрерывную плоскость, а не массив чисел. А в руках у нас только массивы. И от того, сколько будет элементов на мм (что-то вроде частоты дискретизации, только у нас два измерения), точность будет зависеть очень сильно.
Или всё-таки я тупой. Я было подумал что цель реально записывать звук (или другую информацию) в физическую голограмму. А такой цели не было, была цель сделать алгоритм кодирования-декодирования цифровой информации под вдохновением от голографии? Если так, тогда мои комментарии выше мимо кассы.
Под кодированием подразумевается шифрование, сжатие или ещё что-то?
Нет. Это слишком ресурсоёмкий для таких вещей алгоритм.
Да, может показаться, что подразумевается «шифрование», но обычно имеется ввиду всё-таки именно кодирование, т.е. представление (или процесс преобразования) какой-либо информации в каком-либо виде (например, удобном для хранения, передачи или обработки); ещё можно обозначить как представление информации (сигналов) в виде кодов.
Кроме того, насколько я понимаю, алгоритмы шифрования и сжатия всё-таки делаются не на коленке, а со строгим математическим обоснованием.
Не особо вник в код, но есть вопрос: вы написали, что шумы возникли изза того, что пришлось округлять значения в диапазоне 0..255, т.е. в вашем распоряжении был 1 байт на одну точку. А если использовать цветное RGB изображение, где вам предоставлено 3 байта на точку, это улучшило бы результат?
Улучшило бы.
Но то что там три байта на точку не суть важно, в конце-концов округление производится лишь для того чтоб сохранить запись в виде изображения (а это не обязательно, можно просто сохранить числа в файл не округляя).

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

На реальной голограмме длина волны в миллионы (миллиарды?) раз меньше чем сама фотопластинка. Здесь — всего лишь в 50-500 раз.

Правильнее было бы голограмму сделать побольше, это значительно улучшило бы результат.

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

«А какая контрастность в звуковом файле? Почти случайный набор чисел.» — преобразование Фурье не просто так придумали, соно(спектро?)грамма прекрасно показывает контрастность и яркость. если вы возьмете и будете хранить результаты покадрово для каждого момента, или даже хитро вычтете несущественные результаты для уха и придумаете как потом это обратно собрать в wav и хранить поудобнее — у вас получится один из видов mpeg кодирования.
Честно сказать даже мельком видел что есть некие «голограммы Фурье», но не вникал что это такое. (вычислить косинус всё-таки проще, чем делать преобразование фурье :) )
это да, но быстрое преобразование Фурье (БПФ) реализовали на всех, наверное, языках. а обратное преобразование вообще отличается только знаком. так что можно взять чью нибудь реализацию и попробовать сделать что-нибудь духе такого же эксперимента. так же можно использовать оконное преобразование, ограничив область выполнения преобразования нужными для слуха частотами.

вообщем тема для труЪ-матан guys. я увы таковым не являюсь, просто интересовался темой когда-то.
«вообщем тема для труЪ-матан guys»
Наверное. Если вникнуть, то получилось (насколько я понял), так называемое косинусное преобразование со страшными формулами.
Но всё делалось на основании одной страницы учебника по физике, и паре нестрашных формул :)
Почитал быстренько про Фурье. В этом случае нельзя записать на одну «пластинку» несколько изображений.
Кроме того разные части голограммы Фурье содержат разную информацию об объекте (какая-то ВЧ составляющие, какая-то НЧ)
В реализованном примере — информация об изображении «размазывается» поравномернее, этого и хотелось.

Хочу попытаться использовать голограмму в генетическом алгоритме в качестве представления генома. Скорее всего ничего хорошего не выйдет, но «а вдруг» :)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Я не очень понимаю, какой алгоритм он создал. Можете объяснить, как это понимаете Вы?
Ну что за дурная привычка — мешать хвалить :)
Я уже сам понял, наконец, о чём речь.
Какая ж это научная работа.
Обыкновенное моделирование.
НЛО прилетело и опубликовало эту надпись здесь
как насчет изображения посложнее?
хреново :)
Хотя… Какие-то контуры таки выделяются. При должном воображении угадать можно :)
Голограмма — штука толстая, и на том живёт. Цифровая голограмма как минимум многослойной должна бы быть, кажись.
Их там куча видов. Тонкие тоже бывают.
Толстую голограмму сложно смоделировать. Там уже дифракция работает.
хм… надо мне подучить матчасть. Думал, без дифракции голограммы и не бывает…

И в ВП вон, слово «дифракция» упоминается четырежды в рамках необъяснённой, но явно ключевой характеристики «относительная дифракционная эффективность»
Задачи подобного типа, по крайне мере для изображений, изучены более чем хорошо. Они вообще допускают и аналитические решения. То есть вначале рассматривается псевдонепрерывное изображение — например набор точек — дельта-функций в нужных местах. Потом находят решение в аналитическом виде, возможно в виде ряда — и вот его уже дискретизируют. На практике очень много ограничений накладывается, в связи со сложностью изготовления таких фотопластинок. Часто ограничение настолько сурово — что фотопластинка должна быть вообще бинарной.
Большое количество работ этому в свое время было посвящено в журнале «Компьютерная оптика».
На одном из мероприятий для стартаперов в Питере видел команду, разработавшую технологию передачи информации по оптоволокну с использованием, насколько я понял, как раз голографических принципов. На момент выступления ребята уже имели соглашения о намерениях с МТС и ещё с кем-то и находились в стадии разработки работающего прототипа.
В цифровом виде всё это дело нереально обрабатывать быстро.
А вот аналоговую схемку-микросхемку может быть и можно сделать.
Вообще-то тут несколько простых операций, причём независимых друг от друга, это можно хорошо параллелить, думаю на видеокарте оно должно побыстрее считаться, хотя все-равно, даже порядок-другой скорости здесь вряд-ли что-то даст.
Параллелить можно, но на порядки всё равно не ускоришь.
Воистину, идеи витают в воздухе. Недели 4 назад написал себе на бумажке «попробовать сжатие звука голографическим методом». Вы меня немного даже шокировали :)

По теме: 1) я думаю, что надо кодировать не весь файл, а микроблоки. Недавно один мой знакомый опубликовал статью как раз о том, как «размазывать» звуковую информацию по временному окну. Задача данная важна, например, при радиосвязи. Из-за переотражения с последующей интерференцией в определённых местах пространства сигнал может иметь низкую амплитуду. Одно из решений — две антенны (например, милиция ставит две разнесённых антенны на машине), чтобы не терять сигнал. Другое решение как раз — «размывать» информацию. Понятно, что никого не интересует в таком применении минутный файл. Временное окно гораздо меньше.

2) Я совсем поверхностно знаком с голографией, поэтому для меня математически не очевидно, что изображение должно иметь высокий контраст. Но если это так, можно и правда использовать БПФ. Ну и шкалу побольше взять можно (2 байта, например, а не один).

3) Я не уверен, что Ваш алгоритм голографии самый лучший (что аналогии проведены верно, и что модель построена оптимальным образом), тут надо думать.

4) Можно попробовать применить какое-то сглаживание к голограмме (непонятно).

5) Мне кажется, при размере изображения A x A, голограмма должна быть как минимум 2A x 2A или больше. Чисто из соображений теоремы Котельникова (хотя она тут не очень применима формально, по сути всё равно увеличение числа отсчётов в 2 раза быть должно).

Надо будет всё же сесть и попробовать.
2. Со студенчества косо смотрю на БПФ (хотя понимаю что мощная штука). Будем считать это моим «комплексом» :) Плюс, повторюсь, голограмма Фурье позволяет запись только только 1 образа на пластинку (минус к магии). А продемонстрированная «классическая» голограмма позволяет записать много разных изображений на одну пластинку и они не будут мешать одно другому (плюс к магии)
3. Он ещё и не совсем корректный. В частности сложение интенсивностей (не амплитуды) колебаний
должно происходить не по формуле I=I1+I2*cos(fi), а по формуле I=I1+I2+2*sqrt(I1*I2)*cos(fi). Ну и ещё там есть пара нюансов.
5. Теорема Котельникова, наверное, действительно не имеет прямого отношения. Тут важнее сколько интерференционных полос помещается на пластинку, но прямой зависимости от размеров исходного изображения наверное нет.
Но, конечно, чем больше размер голограммы, тем лучше. В приведённом примере 50 на 50 точек — это намного меньше квадратного миллиметра «настоящей» голограммы. Реальная разрешающая способность фотоматериалов используемых для голографии — 5000 линий/мм.

Скорее всего цифровое моделирование классической голографии тупиковый путь (долгий в плане вычислений). А вот подумать — можно ли собрать аналоговую схему завязанную на голографию, наверное имеет смысл. Плату расширения для компьютера такую сделать например (зачем-то :) )
Я в качестве хобби занимался распознаванием речи. Так вот речь и музыку (до 11 кГц) пропускал через фильтр аналогичный фильтру в улитке уха. У меня было 100 очень низкодобротных фильтров на весь диапазон. Дискретизация по времени всего 30Гц. Обратным процессом восстанавливал в звук, на слух разницы между оригиналом и восстановленным почти нет.

Так вот, то что я кодировал, выводил в виде изображений (100 точек по вертикале в развёртке по числу фильтров). Картинки очень чёткие. А музыка на пианино вообще чистые линии как у Вас в примере буква Z.

Вам надо делать предобработку звука, а потом сохранять полученное изображение.

PS. Тем, кто занимаются моделированием нейронов и памяти, тоже будет интересен Ваш опыт.
Кстати, если изображение состоит из простых и чётких элементов, то это сильно ускоряет алгоритм, т.к. можно не учитывать «чёрные» точки исходного изображения.
Аналогично для векторной графики, алгоритм разгоняется, т.к. есть возможность обходить только точки отразившие свет.
что-то мне это напомнило…

Fractal compression is a lossy compression method for digital images, based on fractals. The method is best suited for textures and natural images, relying on the fact that parts of an image often resemble other parts of the same image. Fractal algorithms convert these parts into mathematical data called «fractal codes» which are used to recreate the encoded image. (Wikipedia)

а также

Wavelet compression is a form of data compression well suited for image compression (sometimes also video compression and audio compression). Notable implementations are JPEG 2000 for still images, and REDCODE, the BBC's Dirac, and Ogg Tarkin for video. The goal is to store image data in as little space as possible in a file. Wavelet compression can be either lossless or lossy. (Wikipedia)
Ну, к компрессии это особого отношения наверное не имеет. Есть более «гуманные» методы (в т.ч. приведённые вами).
Кстати, немножко не в тему — когда-то мне попался файл какого-то экзотического формата, как оказалось — сжатый как раз «фрактальной компрессией». Некоторое время потратил на поиски вьювера чтоб посмотреть этот файл. Открывался файл наверное минут 20, но когда открылся, меня очень поразило соотношение размера изображения и размера файла (в смысле — ну очень сильно сжато, и довольно качественный результат)
1. Получается, за 4 часа 1 мегабайт звука можно же закодировать было? Почему не попробовал?))
2. Чтобы не было шумов и свистов, кодировать надо спектральную картину звука.
3. В модели было бы неплохо добавить уменьшение сигнала от расстояния.

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

Я себе, в общем, как-то немного по-другому представлял голографию:

ru-neuroscience.livejournal.com/63907.html
1. 10 килобайт — 1 минута, 1 час = 10 килобайт *100, т.е. выполнялось бы в 100*100 раз дольше, т.е. 170 часов.
2. это голограмма Фурье, уже писал про неё в комментариях.
1 час = 10 килобайт * 100 — в смысле 1 мегабайт = 10 килобайт* 100.
3. Изначально так и было, но вроде бы ничего особого это не давало. В данном случае считаем, что объект настолько далеко от фотопластинки, что расстояние не сильно уменьшает сигнал (в определённый момент времени звезда тоже наверное ближе к одной точке земли, чем к другой, но на яркость это считай не влияет).
1. Там про «Радужные голограммы», это те которые видимы в обычном свете (те которые на разных «защитных наклейках» используют).
2. А вот это интересно, там как раз про минимизацию шумов (выбор оптимальных параметров)
> по поводу коэффициента 0.3 — будет написано далее
> Коэффициент в этой строке $obj_light=($data[$x0][$y0])*0.3; подбирается. Хотя можно для него и формулу вывести, правда отдельно для случая кодирования и случая декодирования.

Уважаемый автор статьи, очень хотелось бы подробнее узнать про этот коефициент и если возможно, сбросить формулы (или источник), чтобы понять как его подбирать. Спасибо.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории