Skip to Content

Март 2011

Суббота для человека или человек для субботы?

Со всевозрастающим изумлением читаю дискуссии про memcpy, glibc, Линуса, Adobe и Дреппера:

(русскоязычные - они свежие, на LWN все уже отшумело три месяца назад).

И думаю я следующую думу: сама тема не оставляет (девелоперов) равнодушной, раз столько понаписали, делит девелоперов на 10 две группы очень четко. Причем, для меня ответ очевиден, равно как он столь же очевиден (но другой) для другой группы.

А значит - это прекрасный вопрос для собеседования, причем важен не столько ответ, сколько его объяснение, а за вторую сторону можно легко потроллить. Я бы сказал, что от PM и выше - просто обязательный вопрос, а для кодеров - мировоззренческий. И не надо собирать в одной команде (компании, стране, вселенной) людей, отвечающих на этот вопрос по-разному.

Для тех кто в танке, суть проблемы (при взгляде с одной из сторон):

О фотошопе

А вот, допустим, вы обрабатываете фотографии в Фотошопе. Цветные.

Внимание, вопрос: должны ли вы обращать внимание на установку Gray profile в Color Settings, а если да, то почему?

О платформах и технологиях

Вот берем два Друпальских модуля внешней авторизации:

  • Facebook Connect - позволяет одним кликом создать аккаунт на друпальском сайте, все мгновенно.
  • OpenID - аккаунт создать позволяет, но не верифицированный, уйдет E-mail, на полученный линк надо будет кликнуть (да и то, эта функциональность не так давно появилась, раньше можно было только существующий аккаунт привязать к OpenID-URL).
И сначала я на поведение OpenID ругался (про себя, да и вслух), а потом осознал сермягу:
  • В случае Facebook (ЖЖ, Твиттера, Вконтакте, MailRU....) я доверяю (или не доверяю) конкретному сервису (платформе). А они, в свою очередь, пытаются (своими немаленькими ресурсами) отличить людей от роботов и все такое. Список доверенных - невелик, а если вдруг чего, то и отозвать доверие недолго.
  • В случае протокола (технологии) - доверие делегируется неизвестно кому. Какому-то Васе или Пете, который асилел OpenID-сервер поднять. Но я точно знаю, что средний спамер (что по каментам, что по почте) технологически гораздо продвинутее, чем просто средний Вася. Более того, спамеры на порядки активнее "просто пользователей".
Получается, доверять технологии - нельзя. Платформе, за которой стоят конкретные люди и силы, заинтересованные в хорошей работе платформы - можно. Платформа может быть распределенной, конечно, но не изолированными островками неизвестного количества.

Мораль: OpenID труп.

День друпала

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

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

О Rawspeed

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

Вспомнив, как я три месяца назад брызгал слюной в направлении RawSpeed сделал svn up, чтобы убедиться, что слюна не подействовала (я в личной переписке автору тоже все рассказал).

Однако, подействовало. Внимательно я не вчитывался, но на первый взгляд все сделано очень хорошо и правильно. Если вызывающее приложение использует scaleValues(), то и прозрачно для него.

Я рад. И за RawSpeed и за использующих ее приложения.

О ДД и ББ в тенях

Предыдущая моя заметка О линейности в тенях как-то не вызвала того эффекта, который я ожидал. Давайте усугубим.

Представим себе некое серое тело разной яркости, снимаемое при некоем (примерно дневном) балансе белого на 5D Mark II.

Вот по уровню "среднесерого" имеем отклики (R-G-B) равные 435-1035-650. Применяя коэффициенты баланса белого 2.38-1-1.59 (я везде немножко округляю), получим серое в среднем тоне: 1035-1035-1035.

Теперь идем на 6 стопов в тени (у нас же камера с 12-ю стопами ДД по DXO Mark и с 9-ю стопами Tonal Range по тем же данным, можем себе позволить), снимаем то же серое тело.

За счет нелинейности стопов и разной чувствительности каналов накопленная за 6 стопов нелинейность будет разной.

Получим отсчеты R-G-B: 5.18-9.68-6.59 (это усреднено по большим плашкам).

Наложим тот же баланс белого, что и в полутонах. Получаем: 12.33-9.68-10.49. Был серый, стал "темно-розовый".

О линейности в тенях

Товарищи солдаты, о чем вы думаете, глядя на эту картинку:

Как она получена:

  • Берем серую карту, экспонируем по экспонометру.
  • Дальше начинаем крутить выдержку (сохраняя диафрагму) в сторону уменьшения, пока не упремся в 1/8000.
  • Дальше берем (усредненные) RAW-значения для выдержки, скажем, 1/4000 и делим на значения для 1/8000.
  • Повторяем для пары 1/3000-1/6000, 1/2500-1/5000 и так пока тестовый набор не кончится.
  • Ожидаем, что значения различаются ровно вдвое.

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

Механизм явления понятен, у нас не сигнал, а "сигнал+шум", базовый уровень шума (т.е. при околонулевом сигнале) в районе 4-5 единичек, вот шум то и жрет контраст. Если смотреть на значения еще ниже, то там график аккуратно стремится к единице (полному отсутствию контраста).

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

Надеваете сверху валенок! И никаких сношений!

Третий день мучаюсь со съемкой ровного поля, не такая это простая задача получить реально ровно.

Пока наилучший вариант такой:

  • Берем адаптерное кольцо Lee (или любое другое с подходящей резьбой).
  • Клеим на него кусок пенополиэтилена от коробочек от фильтров Schneider (квадратные кусочки) или Canon (круглые). Сигмовский "крупноячеистый" не подходит. Чистый, естественно.
  • Все это навинчиваем на достаточно длинный телевик (300мм в самый раз)
  • Который диафрагмируем на пару стопов от максимума. Дальше не надо, лезет мусор с матрицы, но и меньше не надо, виньетирования у телевиков как-бы нет, но несколько процентов есть.
  • Который (телевик) наводим на бесконечность.
  • Снимаем ровное поле без бликов
Удается получить 1% по центру кадра (1/4 площади) и 3% по всему полю.

Самое в этом удивительное, что если убрать последний пункт и снимать просто "пейзаж за окном", неравномерность заметно растет.

Ну то есть понятно, можно снять какой-то flat-field и если он остается постоянным во всех экспериментах, то и нормировать на него, но это сколько лишнего программировать....

P.S. Астрономы с flat field не парятся, как я выяснил. Пишут "а вот белую майку на телескоп накинь и сними что-нибудь". Наверное, с совсем длинным фокусом этот номер лучше проходит.

P.P.S. Про астрономов я погорячился: http://www.astrosurf.com/comolli/flatfield2.htm

Последнее слово техники: прощай....

Если вы пользуетесь Ovi Suite, не повторяйте моих ошибок, включите синхронизацию контактов с каким-то внешним приложением (Outlook и т.п.) заранее.

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

P.S. Nokia 6700, сука, нежный. Пойду куплю себе самсунг с фонариком.

Update: NBU Explorer решает задачу выемки из бэкапа. Бэкап у меня не безумно свежий, но остаток можно руками вбить.

О дробных ISO у Canon 5D Mark II

До недавнего времени я считал, что у 5D Mark II "честными" являются только "целые" ISO (100,200,400 и т.д).

В свое время я поверил исследованию уровней насыщения, которые Павел Буров сделал для 40D (у Павла получилось, что нецелые ISO сделаны умножением после АЦП) и для 5D2 не переделывал.

А тут переделал. Получилось, что ситуация у 5D Mark II несколько другая:

  • Ряд 100-200-400-...3200 - "честный", уровни насыщения одинаковы до ISO3200 (около 14740 для моего экземпляра камеры). Ряд 6400-12800-25600 тоже "честный", но диапазон значений там больше, до 15349 (все диапазоны - после вычитания уровня черного, который в районе 1000, чуть больше).
  • Ряд 125-250-500...4000 - имеет такие же максимумы, как и предыдущий ряд. Каких-то еще причин подозревать "нечестность" пока не вижу.
  • Ряд 160-320-640-2500: судя по всему, получен цифровым делением результата съемки на следующем (200-400...4000) ISO на 1.25. В пользу этого максимумы, составляющие 11787 и насыщение, наступающее при одинаковой экспозиции (если ISO400 насытилась на 1/25 и почти насытилась на 1/32, то и ISO320 ведет себя ровно так же).

    5000 в этом же ряду "честная", имеет максимум в 14740.

Итого: я продолжу пользоваться "целым" рядом ISO, тем более что его достаточно для любой практической жизни.

Кроме того, есть ряд мелких замечаний:

О Равномерности

Чтобы достичь неравномерности по полю в пределах 2% пришлось:

  1. Взять средний телевик (Цейсс 100/2 макро).
  2. Закрыть его до f/8.
  3. Надеть на объектив матовую крышечку от чипсов Pringles колец Lee (белый полиэтилен).
  4. Навестись на бесконечность.
  5. Фотографировать лист белого картона.
И то, такая равномерность получилась только в центре кадра (примерно 10% по площади), если по всему, то там процентов 8 разницы.

Удивительнее всего, что первых четырех шагов - не хватает.

Кто бы мне объяснил, как без "крышечки от чипсов" можно снимать те же Колорчекеры....

P.S. Неравномерность оценивалась так: по изучаемому полю брались самплы 300x300 (это для всего кадра, для центральной части 150x150), общим числом 24, по ним считалось среднее и сравнивалось. То есть речь не о выбросах отдельных пикселов, а именно о среднем.

Update: нашел ссылку на таблицу (самому считать скучно). 8% на 100-мм - это в чистом виде удар косинусом.

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

О сейсмической активности

DRAMeXchange пишет в рассылке, что японские события привели к паническим покупкам флэш-памяти.

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

О фотонном шуме

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

Оказалось, что если Пуассоновский сигнал биномиально отфильтровать , то он остается Пуассоновским.

Но вот что в этом удивительно:

  • цифровые астрономы (CCD astronomy) говорят об этом как об очевидном факте. Нашел, в частности, статью 1992-го года, на которую все (цифровые астрономы) ссылаются, но и в ней Пуассоновость - очевидный факт.
  • а строгий вывод этого факта нашелся в статье квантовых криптографов 2006-го года, для них очевидность неочевидна, более того, они поминают источники фотонов, где это не так.

Отлегло от сердца: стандартная астрономическая методика подбора "оптимального ISO" хоть и построена на песке, но под песком оказался бетон.

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

Представим себе все с точки зрения звезды (или лампочки). Много атомов (N), вероятность каждому испустить квант в дельта-t (p0) - мала. Биномиальное распределение с большим N, маленьким p т.е. переходящее в Пуассоновское.

Рассмотрим дальше жизнь кванта: оно должен не поглотиться по дороге (вероятность p1), отразиться от объекта в нашу сторону (вероятность p2), не стукнуться о диафрагму (p3), попасть в сенсор и породить электрон (p4, она же квантовая эффективность).

То есть для заданного атома (звезды) вероятность породить электрон в нашем сенсоре будет p = p0*p1*p2*p3*p4 (при этом все члены - меньше 1).

Получаем биномиальное распределение с параметрами N,p, которое еще более пуассоновское, чем исходное.

О линейности в светах

Смотрю тут на свеженамеряные данные по линейности Canon 5D Mark II (текст пишется, в ближайшие дни будет) и думаю вот какую думу:

Максимальный уровень сигнала (на ISO100) в районе 14700. Даже если весь шум определяется исключительно фотонным шумом, среднеквадратичное отклонение будет в районе 120. А на самом деле оно и вовсе 250-260 (при измеряемой плашке 160x160 пикселов).

Получается, что если реальный уровень сигнала у нас, скажем, 14450 (на сигму меньше максимума), то порядка 16% пикселов (выходящих "за сигму" в положительную область) будут обрезаны по максимуму. Что, в свою очередь, приведет к смещению среднего значения для больших плашек (вроде неба или облаков), т.е. испортит "яркость".

Природа обрезки принципиального значения не имеет, это может быть и переполнение пиксела и и обрезка в АЦП и обрезка после АЦП, эффект чисто "математический".

За счет того, что чувствительность каналов - разная, максимумы для всех каналов одновременно достигаться не будут, следовательно эффект испортит еще и "цвет".

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

О линейности цифровых фотокамер на примере Canon 5D Mark II

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

Методика разрабатывается на ходу и еще до конца не готова. В частности, разумной визуализации, пока нет, смотрю на цифры в экселе и медитирую, о результатах придется рассказывать на словах.
Предпосылки
При изучении линейности (и вообще характеристической кривой) нас мучают нелинейности на исходной сцене (засветки, неравномерность освещения и т.п.), неточность работы затвора и диафрагмы и прочие подобные безобразия. Кроме того, доступные методы регулировки экспозиции достаточно грубы и снять серию экспозиций с шагом меньше 1/3 стопа на современных ЦФК затруднительно.

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



.