Пользователь
0,0
рейтинг
4 сентября 2011 в 17:22

Разработка → Стереоизображение — это просто из песочницы

Привет, %username%.

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

Введение


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

Очень важно, чтобы ширина повторяющегося фрагмента была меньше, чем расстояние между глаз. Для комфортного просмотра стереоизображения ширина должна колебаться в пределах от 1/3 до 2/3 данной величины. Чем ширина больше, тем более глубокое (объемное) изображение можно получить. Чем меньше ширина, тем меньше устают глаза от просмотра стереоизображения.

Чтобы увидеть объемное изображение, необходимо сфокусировать взгляд за плоскостью рисунка таким образом, чтобы изображения для левого и правого глаз совпали. Для изображения, целиком состоящего из повторяющихся фрагментов, вы будете наблюдать точно такое же мнимое изображение (ровная плоскость). Единственное отличие – вам будет казаться, что рисунок стал располагаться дальше.
рис 2.
рис 2.

Как получается объемное изображение?


Чтобы изображение стало объемным, некоторые его части должны восприниматься, как более близкие, другие – как более удаленные. Данного эффекта можно достичь путем сдвига элементов изображения.

На рисунке 3 показано, как изменилось мнимое изображение, после сдвига двух элементов (красного и фиолетового) реального изображения на одну позицию влево.
рис 3.
рис 3.

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

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

Если мы хотим изображать объекты, расположенные только перед плоскостью мнимого изображения, нам необходимо уметь бороться с нежелательными артефактами. Для этого достаточно осуществить сдвиг элементов в каждом периоде, расположенном справа от первого места сдвига (рисунок 4).
рис 4.
рис 4.

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

Собственно реализация


Создавалось стереоизображение следующей функцией, написанной на C#:

private Bitmap GenerateStereoPicture(Bitmap bitmapMask)
{
  // Переводим маску в массив сдвигов
  int w = bitmapMask.Width;
  int h = bitmapMask.Height;
  int[][] mask = new int[w][];
  for (int x = 0; x < w; x++)
  {
    mask[x] = new int[h];
    for (int y = 0; y < h; y++)
      mask[x][y] = bitmapMask.GetPixel(x, y).R / 32;
  }

  // Cоздаем фон
  int s = 100;
  Bitmap stereoImg = GetNewStereoPicture(w + s, h, s);

  // Сдвигаем каждый пиксел
  for (int y = 0; y < h; y++)
    for (int x = 0; x < w; x++)
      if (mask[x][y] > 0)
      {
        Color pixel = stereoImg.GetPixel(x + mask[x][y], y);
        for (int i = x + s; i < w + s; i += s)
          stereoImg.SetPixel(i, y, pixel);
      }

  return stereoImg;
}

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

Точки черного цвета трактуются функцией как точки с нулевым сдвигом, т.е. они формируют плоскость мнимого изображения. Чем ярче цвет точки, тем больше ее сдвиг, тем ближе она будет казаться наблюдателю. Так как изображение выполнено в серых цветах, то для определения яркости точки я использовал яркость красной составляющей RGB, поделенную на 32. Таким образом, максимально возможный сдвиг равен 255/32 = 7.

После формирования массива сдвигов, функция создает изображение шириной w+s пикселей, высотой h пикселей и с шириной повторяющейся части s = 100 пикселей. В качестве повторяющейся части я генерирую случайное изображение, состоящее из случайного количества случайных фигур (эллипс, прямоугольник, дуга, кривая) случайного размера и цвета. Вы же можете подойти к этому этапу творчески и заранее подготовить какой-нибудь красивый фон.

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

P.S. Буду очень рад, если данная статья поможет кому-то хотя бы научиться смотреть стереоизображения, так как сам я далеко не сразу смог это освоить.
Роман Веснин @romMan
карма
38,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (132)

  • +3
    Отличная статья, раньше у меня не получалось на них смотреть, спасибо:)
  • +30
    Жаль, что я их не вижу :(
    • 0
      Близко поднести глаза к картинке, подождать расслабленно 5-6 секунд, а потом медленно, (не пытаясь нарочно сфокусировать взгляд) ототдвигать голову — не помогает?
      • +15
        Не помогает :( я уже несколько лет периодически пытаюсь увидеть хоть что-то осмысленное на подобных картинках — ниразу не получилось :(
        • +7
          Вот, потренируйтесь на кошках этой картинке
          • 0
            Круто блин :) А как фокус навести? Более-менее (хотя и расплывается немного) получается если уж совсем лицо к монитору подносить.
          • 0
            А кошка картинка кстати довольно неплохая :)
            • +6
              Не зная как вам, но мне удобней фокус глазами «настраивать». Можно на воображаемую точку между монитором и вами смотреть. И двигать её, тем самым фокус на изображении и настраивается. У меня как то получался стерио-линолеум в поликлинике увидеть, пока очереди ждал :)
              • 0
                Урра! Заработало, спасибо :) Фокус сам настраивается если смотреть на совмещенную картинку около минуты и стараться расслабить глаза. После этого и с сабжевой картинкой из этого трида получилось.
                • 0
                  :) рад за вас. Иногда помогает, если поморгать.
                • 0
                  Ура! У меня по вашему совету тоже получилось, первый раз в жизни!
              • +1
                Можно на воображаемую точку между монитором и вами смотреть.
                Это только для изображения, ссылку на которое вы дали. Изображение же в топике нужно рассматривать сквозь.
                У меня как то получался стерио-линолеум в поликлинике увидеть, пока очереди ждал :)
                Специально увидеть стерео-линолеум/обои/т.п. не составляет труда. А вот по-забавному бесит, когда совершенно случайно как-то не так сфокусируешься на рабице (забор-сетка) и понимаешь, что зрение тебя обманывает и нужна перефокусировка.
                • 0
                  >>> Это только для изображения, ссылку на которое вы дали. Изображение же в топике нужно рассматривать сквозь.

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

                  Случайный фокус только на обивке салона в автомобиле «ловил».
                  • +1
                    Изображение топика двумя способами разглядеть получается.
                    Перекрестным просмотром вы получите инвертированную дальность. Да, для простого изображения типа буковок это роли, конечно, не сыграет, но в более сложных случаях ничего не выйдет.
                    Мы-то с вами это понимаем, но новичков в этом деле стоит предупредить, чтобы потом не удивлялись, почему удалось рассмотреть только одну картинку.
              • 0
                я кстати тоже бывает рассматриваю «стерео обои» главное чтобы шаг был не сильно больше расстояния между зрачками.
      • +1
        Увы, у меня отсутствует бинокулярное зрение, ничто не поможет :)
    • НЛО прилетело и опубликовало эту надпись здесь
    • +2
      У вас случайно нет астигматизма? У меня такая же проблема
      • 0
        У меня хорошее зрение (1.0), но стереокартинки не могу увидеть. Тут дело в чём то другом.
        • 0
          Я вот из-за особенностей зрения и 3D-фильмы не вижу в объеме, не говоря о стереокартинках
          • 0
            Ни фильмы, ни картинки не вижу — у меня косоглазие и смотрю я либо левым, либо правым глазом. Двумя — никогда.
    • +10
      Потренируйтесь на этой картинке:
      image
      • +2
        «Потренируйтесь»… А пояснить человеку, что это перекрестная стереопара, тогда как в топике речь идет об изображениях по принципу параллельной стереопары, да и что это вообще такое, да как их смотреть, — не нужно?

        Оставлю здесь эту ссылку.
        • 0
          — Нужно свести два изображения в одно ( это можно сделать сводя глаза к переносице );
          — Навести резкость.

          Потом можно таким обазом смотреть 3д картинки. Я так научился.
          • 0
            Нужно свести два изображения в одно
            Есть два способа, от которых, грубо говоря, зависит знак z-индекса.
          • 0
            Супер, помог ваш способ. Правда по цветной мазне все равно почти невозможно понять, что написано
      • +1
        Ох ты ж, начал тренироваться и рука лапать потянулась…
      • 0
        Девушка и сама по себе объёмная, но в 3Д еще объёмнее ;)
    • 0
      Самый простой рецепт. Смотрим на картинку с очень близкого расстояния, затем делаем глазу в кучу (пытаемся одним глазом посмотреть на другой). Profit!
  • +1
    А я разучился их смотреть. Не могу и все… =(
  • 0
    У меня получается, но объемности выглядят наизнанку (выпуклости выглядят как вогнутости и наоборот).
    • +7
      Стереоизображения можно смотреть двумя способами: «сквозным» и «перекрестным». В зависимости от способа выпуклое и вогнутое меняются местами. Ты смотришь «перекрестным» способом, когда взгляд фокусируется перед изображением, а не за ним. В статье я описал «сквозной» способ, так как 1) от него менее устают глаза и 2) все иллюстрации, которые мне попадались, правильно выглядели при данном способе.
      • +1
        Перекрестным у меня получается видеть с любого расстояния, сквозным тяжелее
      • +1
        Такие изображения видятся как раз перекрестным способом

        • +1
          Такие изображения вижу впервые. Увидеть в 3D удалось, но сложно было навести резкость ))
          • 0
            это не 3Д изображение. стерео ведь.
        • +3
          Пока фотограф ходил с точки на точку, небо и волны сильно «ушли»… в итоге, от этой картинки у меня заболела голова.
          • +1
            Вообще-то небо на фотографиях одинаковое. А волны разные просто из-за разности точек съёмки. Судя по всему, фотографии были сняты одновременно.
            А вот база действительно выбрана довольно большая.
            • 0
              Да, с небом действительно наврал. Насчет одновременно не берусь судить, в таком случае, но замечу, что на отражение башенки совершенно невозможно смотреть.

              Зачем большая база вроде понятно, расстояние. А вот зачем такой передний план оставлен?..
              • 0
                Да не наврал с небом, облака смещены на втором фото, и довольно сильно
                • 0
                  Если совместить облака и посмотреть на разность, они практически не эволюционировали между снимками. То есть они практически идентичны с точностью до параллельного переноса. Такая ситуация реализуется весьма редко, по опыту наблюдений за небом. Скорее всего, параллельный перенос связан с перемещением точки наблюдения, а не с течением времени и ветром.
                  Плюс, глубина, если смотреть достаточно старательно (и зарабатывать головную боль, да), оказывается вполне вменяемой — если помнить, что расстояние между «глазами» достаточно велико.
                  • 0
                    Левый снимок — граница белого облака идет по шпилю, голубое небо рядом. Правый — белое облако намного левее шпиля и голубой кусочек тоже уехал в лево. если наложить дин снимок на другой в фотошопе в режиме прозрачности — будет отчетливо видно смещение облаков в лево + изменение их формы
                    • +1
                      Вы таки не поняли.

                      Совмещены башенки, рассчитана разность. Видно несовпадение облаков (светлые области).
                      image
                      Теперь совмещаем облака параллельным переносом. Получаем из светлых областей практически одни артефакты. Вывод — облака с точностью до параллельного переноса (и чуть-чуть настроек фотоаппарата) идентичны. Но очевидно, что при этом они не должны одинаково располагаться относительно башенки (иначе окажется, что они на одной глубине с ней, что бред)
                      image
                      В самом низу разница больше, поскольку, вообще говоря, параллельный перенос не учитывает перспективы (которая чуть-чуть, да есть). Но преобразование с учетом этого эффекта делать, естественно, лень.
        • +10
          А еще в играх типа «Найди 20 отличий» перекрестный метод — идеальный чит)
          • +1
            а вы, батенька, затейник
          • 0
            Да, всегда так читерил!=)
          • +2
            Зачем палите тему )
        • 0
          Спасибо, натренировал и этот метод =)
    • +1
      А я вроде легко фокусируюсь на картинке, различаю там несколько слоев, какие-то контуры. Только в пестрой картинке нихрена не могу разобрать, что же именно нарисовано.
  • +14
    Как ни разглядывал изображение, ни одной буквы не увидел, даже примерного очертания слов. Теперь чувствую себя дальтоником в мире зелёных людей. Ну вас нафиг, пойду дальше QR-коды расшифровывать.
    • НЛО прилетело и опубликовало эту надпись здесь
      • 0
        Спасибо! Наконец-то получилось рассмотреть картинку таким способом. А то до этого только скрещиванием.
      • +2
        Увы, лично мне не помогает. Либо изображение остаётся размытым, либо срабатывает автофокус в попытках нахождения очертаний. Возможно причина в некотором астигматизме, но очки распознаванию не помогают.
        • 0
          Аналогично. Автофокус работает мгновенно.
      • 0
        ааааа! спасибо!!! лет десять пытался, увидел наконец!
    • 0
      Есть ещё один похожий способ, но только без приближения лица к картинке и без скрещивания глаз.

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

      Представьте, что картинка на стекле, а за стеклом очень-очень далеко находится какой-нибудь объект. Любой, какой вам нравится: маленький домик на холме; уходящие вдаль рельсы; солнечный закат — любая вещь подойдёт, главное, чтобы виртуально она была далеко за поверхностью стекла. Продолжайте виртуально смотреть вдаль через стереокартинку, и через некоторое время вы заметите, что в ней есть объёмные детали, которые лежат дальше чем плоскость картинки. Начинайте разглядывать их и вскоре сможете увидеть всю картину целиком.

      Если не получится на картинке из поста, попробуйте на других стереокартинах. Там главное понять принцип, а дальше будет очень просто.
      • 0
        А! Ещё забыл очень важный момент :) Многие думают, что они там увидят полноценное изображение и ищут его там, а когда не находят, думают что не могут смотреть стереоизображения. Я сам так думал, когда слышал от друзей: «да там же дельфинчик» или «там такая красивая земля!». На самом деле, там будут те же самые загогулины, которые видно, но только они будут выгнутые или вогнутые.
        • 0
          и что, ни дельфинчика ни змеи те выгнутости загогулин Вам не изображали?
  • 0
    А можете полные сорцы программы приложить?
    • +1
      Здесь исходник, экзешник и файл-маска.
  • +1
    Жесть очень редко удавалось их увидеть, а тут сходу получилось после прочтения, поле в гугл и дофига всяких разных сразу смог рассмотреть, жесть какая-то :))
  • 0
    Это явно не лучшее цветовое решение, я чётко видя то, что есть задний слой и чётко видя границы еле смог прочитать слово HABR.
    • +2
      вы просто ни до конца рассфокусировались, изображение читается очень хорошо.
    • 0
      Не судите строго. Все таки здесь jpg с 85% качества, а печатные иллюстрации имеют большее разрешение, чем экран, из-за чего выглядят более плавными и могут содержать больше деталей.
      • 0
        Означает ли это, что распечатка на цветном принтере будет лучше изображения на экране?
        А если изображение в tiff задать?
        Думаю, стоит такие моменты внести в статью, например, в виде примечаний к рисункам, ведь по качеству иллюстраций судят о качестве алгоритма и программы.
        В остальном, прекрасное решение и хорошая статья.
        • 0
          Именно это изображение — нет, оно имеет разрешение 96*96 dpi. Если внимательно присмотритесь, то будет видно, что изображение ступенчато.
          Для принтера лучше подготовить изображение с высоким разрешением, например, 600*600 dpi. Тогда его размеры вырастут примерно в 6 раз по ширине и высоте, а также нужно будет пропорционально увеличить период со 100 пикселей до 600 и размер максимального сдвига с 7 до 42 (плюс, минус), что сделает «ступени» практически неразличимыми. Но это все мои предположения, так как не имею цветного принтера и проверить не могу.
          В одном из комментариев я выложил ссылку на исходники, так что вы можете попробовать сами все проверить.
  • 0
    Хорошая картинка,
    но я люблю, когда скрытое изображение более сложное -животные, замки, янтры и т.п.

    • 0
      Моих скромных способностей, боюсь, недостаточно для более сложного изображения :) Предложи свое изображение в серых тонах, а стереокартинку сделать проще простого )))
  • +2
    Вы открыли мне глаза!
  • 0
    Совсем скоро этим уже никого не удивишь :(
  • 0
    прекрасно, спасибо за объяснение технологии. Тольно вот рисунок выбрали сложноватый — силуэты лучше для этой цели годятся, по-моему.
  • +2
    Вспомнил школьные тетради с такими изображениями.
  • +2
    Я научился сразу вот так: смотришь вдаль из окна, потом, не меняя фокусировки глаз, ставишь перед глазами экран ноутбука с картинкой. Видно почти сразу.
  • +1
    Так как изображение выполнено в серых цветах, то для определения яркости точки я использовал яркость красной составляющей RGB, поделенную на 32. Таким образом, максимально возможный сдвиг равен 255/32 = 7.


    Прочитал, удивился, снова посмотрел на картинку — и действительно: если присмотреться, можно увидеть ступеньки :-)
    • 0
      И правда, ступеньки заметны, если как следует навести резкость. Правда потом сфокусировать взгляд на нормальную дальность как-то тяжеловато… :)
  • 0
    Со школьных времен ни разу ничего не получилось увидеть.
  • +2
    Надо такую капчу будет сделать:-) защита от спамеров и ещё 70% нормальных пользователей
    • 0
      Да, такую капчу точно боту не пройти. Надо лишь научить людей распознавать картинки, и распознав однажды у большинства получится делать это когда угодно.

      Попытаюсь научить (для тех кто не видит):

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

      Чтобы увидеть скрытое изображение — нужно очень внимательно смотреть. Вопрос только куда.

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

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

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

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

      Надеюсь не зря писал и кого-нибудь все таки получится :)
      • 0
        имхо такая капча легко разгадывается ботом :-)

        находим период, и по соседним секциям восстанавливаем смещения — получаем исходную чёрно-белую картинку :-)
        • +1
          Очень просто, пруф
  • +2
    Вообще-то более точный термин стереограмма, со стереоизображением все намного проще (хотя смотря с какой стороны посмотреть)
    • 0
      вот бы ещё автор заголовок и теги подправил…
  • 0
    У меня никогда не получалось, и сейчас тоже.
    Похоже я так до конца жизни не смогу ни одну стереокартинку увидеть.

    Что за дела.
  • 0
    У меня под градусом лучше получается нужным образом сфокусироваться.
  • 0
    Обожаю эти штуки =) хорошая тренировка зрения…
  • +1
    С детства делаю так. Косишь глаза на 3-4 секунды и расслабляешься. Очень просто и не нужно думать о фокусировке.
  • 0
    Слишком уж сумбурный узор получается — сбивает с толку при разглядывании. Лучше бы просто повторяющийся паттерн с искажениями, как в обычных картинках, тогда создаётся впечатление объёмных фигурок, обёрнутых в фольгу с таким узором. Кажется, это тоже можно сделать программно?
    • 0
      Я так и написал. Пишете свой метод GetNewStereoPicture(), в нем можете использовать заранее подготовленный фон. Я его генерирую рандомно.
      Мне в принципе нет особой разницы, какой на картинке фон, — я почти все воспринимаю легко.
  • 0
    Всегда сожалел, что на стереоизображениях не вижу фоточёткости, о мелких/тонких деталях приходится догадываться — они сливаются с фоном, раскрашивания изображения, как такового, нет.
    А вот «японские» картинки — это супер. Глубина есть, чёткость, фотореалистичность, объём…
    Надеюсь стереоизображения будут эволюционировать
  • 0
    Попытался воспроизвести на C++/Qt, что-то не выходит по Вашему коду.

    hostingkartinok.com/image/01201109/fac4a1b91518a5acce31c4c47a490467.png

    Стерео есть, а букв нет (исходная картинка взята из поста).
    • 0
      Чутка заметны артефакты букв, но совсем уже слабо.
      • 0
        вот-вот, на других тестовых изображениях тоже видны только слабые контуры
    • 0
      Если присмотреться, то видно некие мелкие артефакты на вашем изображении (т.е. все таки что-то сдвигается). Можно взглянуть на вашу реализацию?
      • 0
        вот так сейчас выглядит

        QImage StereoImageGenerator::makeStereo(const QImage & maskImage, const QImage & background)
        {
        int w = maskImage.width();
        int h = maskImage.height();
        int ** mask = new int * [w];
        for (int i = 0; i < w; i++)
        {
        mask[i] = new int[h];
        for (int j = 0; j < h; j++)
        {
        mask[i][j] = qRed(maskImage.pixel(i, j)) / 32;
        }
        }

        int s = 100;
        QImage stereoImage;
        if (background.isNull())
        stereoImage = genBackground(QSize(w + s, h), s);
        else
        stereoImage = background;

        for (int j = 0; j < h; j++)
        for (int i = 0; i < w; i++)
        if (mask[i][j] > 0)
        {
        QRgb pixel = stereoImage.pixel(i + mask[i][j], j);
        for (int k = i + s; i < w + s; i += s)
        stereoImage.setPixel(k, j, pixel);
        }
        for (int i = 0; i < w; i++)
        {
        delete mask[i];
        }
        delete mask;
        return stereoImage;
        }
        • 0
          Форматирование съехало… тег code почему-то не очень сработал =)
          вот тут лучше смотрится
          pastebin.com/ky3dFtkW
      • 0
        Прошу прощения, вопрос снимается, всё работает — в последнем цикле i и k перепутал… ну прям как первокурсник блин… )
        Всякое бывает.

        image
        • 0
          Вы б еще жирнее шрифт взяли, первую букву сначала принял «i» без точки
    • +1
      Я увеличил число слоёв с 7 до 28 — стало гораздо лучше =)

      hostingkartinok.com/image/01201109/0494bd792f054c8b38f65fe3f9090c3f.png

      Гомер Симпсон в разрезе.
      • 0
        Сильно сложнее фокусироваться, по-моему.
        • 0
          Если потренироваться, то проблем быть не должно, сложность фокусировки ещё от размера картинки зависит.
      • 0
        ИМХО, мелковат шаг повтора фона.
        • 0
          Ну, это можно увеличить, но мне кажется и так неплохо.
          Шаг взят 100px — как у автора поста.
      • 0
        это где у него маленький такой мозг в большем черепе? вроде угадалось, правда яркие цвета жутко раздражают зрение
        • 0
          Фон генерился случайным образом, цвета полностью рандомны, но можно в принципе и урезать яркость (например, в гимпе).
  • 0
    Сегодня впервые рассмотрел с экрана монитора. Прямо со своего ноутбука.
    Думал это будет сложно. Ан нет — так же как с печатного листа.

    Думаю, ради прикола в конечную картинку можно было бы зашить пасхалку.
  • +2
    Приятно было почитать. Сам как-то увлекался всякими стерео картинками, даже в ASCII. Вот нашел свою программку 3D стерео заставка для Windows, она динамичная.
    • 0
      запустил на 23" монике. глаза чуть не выпали =)
  • +1
    image
    image
    image
    image
    • +2
      Хехе, круто. Можно прокручивать, не теряя резкости.
    • 0
      Первая хорошая, а вот остальные больше на картонки похожи :) Халтура.
  • +1
    Ууух… Как же давно я такого не видел…
    А глаза то помнят. Малейший взгляд и я увидел картинку.
    Автор, спасибо!
  • 0
    Спасибо! Помню, когда-то я карандашами и линейкой такие картинки рисовал… :)
  • 0
    Возник вопрос.
    При генерации данным алгоритмом иногда возникают такие вот артефакты:

    исходник hostingkartinok.com/image/01201109/a555f1f18d9645a4900e6e08c0f0371b.png

    стерео hostingkartinok.com/image/01201109/0a6c474d5281e03108013127eec47f0c.png

    Это лечится? И из-за чего возникает такой эффект?
    • 0
      Попробуй уменьшить максимальный сдвиг или цвета сделать более темными.
      Вечером постараюсь глянуть по подробнее.
      • 0
        Если делитель поставить 32 (как в статье), то артефакты пропадают, а если уменьшить — то опять появляются.
        Можно узнать, откуда взято число 32? )
        • 0
          Число взято «с потолка». Но признаюсь, при тестировании программы изначально тоже стоял делитель меньше, и я ни как не мог получить читаемый текст. После чего попробовал уменьшить максимальный сдвиг, и чудо произошло :))
          Возможно в данном алгоритме есть бага. Потому как первая подобная программа мною была написана примерно в 2000 году еще на паскале ( там таких артефактов не встречалось), алгоритм восстанавливался по памяти. Надо бы сравнить исходники
          • 0
            Вообще, интересно бы проследить — как найти оптимальный коэффициент. )

            А с паскалем и алгоритмами знакомая история…
    • 0
      Хм… Как-то от степени расфокусировки зависит. То вижу правильный вариант, то с артефактами.
      • 0
        Если пристально смотреть на самый большой круг, то артефакты почти не видны, но стоит сдвинуть взгляд… )
      • 0
        Аналогично. Когда фокус на большом круге, то видны артефакты; когда фокус на «стене», все нормально.
    • 0
      Это лечится сменой фокусировки :) Я на вашем рисунке увидел три картинки:

      1. Вместо большого шара — два серпа как у луны, острыми краями внутрь
      2. Вместо большого шара — шар поменьше и два серпа луны справа, острыми краями в левую сторону
      3. И собственно такой, как и задумывалось вами на исходнике

      Мне кажется в алгоритме есть интересный глюк, когда ошибка вынуждает воображение генерить разные формы стерео
  • 0
    А ещё интересно открыть картинку отдельно и увеличивать её колёсиком мышки. Возникает такой забавный эффект «скроллинга» при повороте головы :-)
  • 0
    > P.S. Буду очень рад, если данная статья поможет кому-то хотя бы научиться смотреть стереоизображения, так как сам я далеко не сразу смог это освоить.

    Спасибо.

    Картинка в посте — первое стереоизображение, которое получилось увидеть правильно.

    Может быть, весь фокус в этом? «Чтобы увидеть объемное изображение, необходимо сфокусировать взгляд за плоскостью рисунка»
    • 0
      Именно )))
  • 0
    хахах, до меня дошло, в стереоизображения надо капчу заливать)
  • 0
    А есть готовые программы для генерации таких изображений? Чтоб можно было фон задать и размеры?
  • 0
    После всех этих картинок буквы в комментах двоятся <_>
  • 0
    А в стереоигры не играли?
    Попробуйте 3dimka.deviantart.com/art/3D-Stereogram-Tetris-36795242
  • –1
    Несколько раз прогнал результат работы программы через ее саму. Вот что получилось:
    habrastorage.org/storage1/eb468034/cff85501/5f7cd755/e239020a.png
    • +1
      На первом стерео цифры читаются. А остальные картинки для чего?

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