20100806

Удаление пыли на матрице в Gimp

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

Пятна от грязи на матрице

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

Я же расскажу, что делать с фотками, на которых эти пятна уже есть. Использую для этих целей Gimp и плагин Resynthesizer. Конечно, можно было бы обойтись обычной клонирующей кистью, но вычищать несколько фотографий подряд, особенно если там по несколько пятен на каждой, утомительно. А Resynthesizer оказался неплохой автоматической «клонирующей кистью». Пользователи Ubuntu могут установить плагин пакетом gimp-resynthesizer.

Вначале пятна надо найти и выделить. Я обычно использую свободное выделение (лассо). Чтобы выделить сразу несколько пятен, удерживаю нажатой клавишу Shift. Важно захватить в выделение достаточное количество «чистых» пикселей на границе: они влияют на результат работы Resynthesizer.

Затем можно запустить сам плагин: Фильтры -> Карта -> Resynthesize.... В общем, параметры по-умолчанию работают обычно достаточно хорошо. Возможности периодического мощения (make ... tileable) нам в этом случае не нужны.



Плагин не очень шустрый. На большой фотке (10-15 мегапикселей) нужно будет несколько секунд подождать. Впрочем, это всё равно быстрее и легче, чем использовать клонирующую кисть.

Наконец, нужно осмотреть результат, нет ли никаках странностей. Скорее всего, всё будет нормально (пятна обычно заметны как раз на таких местах, которые Resynthesizer легко восстанавливает: небо, облака, море, сплошная растительность). Если выделение было слишком тесным, его граница прошла слишком близким к пятну, то на месте пятна может всё равно остаться размазанное потемнение. В этом случае нужно отменить исправление и повторить, выделив пятна по-другому. Однако обычно всё удаляется с первой попытки:

Пятна грязи на матрице удалены плагином Resynthesizer

В общем, чистого всем неба! Если полезно — Flattr this.

Riviera

Also in English: Cleaning sensor dust with Gimp.

20100322

Впечатления о Цюрихаке

Вчера вернулся с Цюрихака. Интересная была поездка. Программировать в компании 80 других фанатов очень даже занятно. Здорово, что можно прямо тут же что-то обсудить, наметить цели, поделить работу и её сделать. Приятно браться за незнакомый код и в сжатый срок добавлять к нему что-то полезное (а с Хаскелем такое по силам даже новичкам; и новичкам с готовностью помогали). Большинство участников поселились все вместе в одном хостеле, так что вечерами собирались большими компаниями, чтоб выпить кружечку пива, познакомиться, послушать рассказы других людей, поделиться своим опытом и впечатлениями. Ну и просто увидеть людей, имена которых были уже знакомы, тоже интересно. Вот они, цюрихакеры (я тут тоже есть):



20100129

Автоматический учёт времени: Arbtt macht frei!

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

А вот есть программка похитрее: arbtt. Пользоваться ей, правда, легче. Она полностью автоматическая. Достаточно запустить arbtt-capture и заниматься своими делами*. arbtt-capture будет записывать когда и какие программы были запущены и какие у окон были заголовки.

* Автор arbtt рекомендует сразу добавить arbtt-capture в автоматически запускаемые приложения.


Чтобы увидеть необработанные сырые данные, можно выполнить arbtt-dump, но это не очень полезно. Для просмотра статистики удобнее использовать использовать утилитку arbtt-stats.

Чтобы arbtt-stats могла выдавать осмысленные результаты, нужно вначале задать свою классификацию запущенных программ. Эти правила вписываются в файл ~/.arbtt/categorize.cfg. Пример и описание формата правил есть в документации. Приведу свой (сокращённый) пример с комментариями по-русски:
-- правила имеют вид:
-- [условие ==>] tag [категория_тега:]тег,
-- в условиях и тегах можно использовать несколько специальных переменных,
-- почти все они встречаются в примерах ниже

-- Не учитывать время простоя
$idle > 60 ==> tag inactive,

-- Все записи за последние 24 часа пометить тегом last-day
$sampleage <= 24:00 ==> tag last-day,
-- Пометить тегом last-hour все записи за последний час
$sampleage <= 1:00 ==> tag last-hour,

-- Все типы окон Firefox учитывать в одном теге program:web (program — это категория тега)
current window $program == "Navigator" ==> tag program:web,
current window $program == "firefox-bin" ==> tag program:web,
current window $program == "gecko" ==> tag program:web,
-- Общий тег для всех видов терминалов (на будущее)
current window $program == "gnome-terminal" ==> tag program:terminal,
-- Пометить все остальные программы пометить тегами вида program:имя_программы
tag program:$current.program,

-- Классифицировать заголовки Firefox с помощью регулярных выражений. Тут у каждого будут свои шаблоны.
-- Присваивать теги категории web.
current window ($program == "Navigator" && $title =~ /^Gmail.*/) ==> tag web:Gmail,
current window ($program == "Navigator" && $title =~ /.*Google Search.*/) ==> tag web:Google,
current window ($program == "Navigator" && $title =~ /^Twitter.*/) ==> tag web:Twitter,
current window ($program == "Navigator" && $title =~ /.* on Twitter - Iceweasel$/) ==> tag web:Twitter,
current window ($program == "Navigator" && $title =~ /^Springer.*/) ==> tag web:Papers,
current window ($program == "Navigator" && $title =~ /^Wiki - Editing.*/) ==> tag web:Papers,
-- ...
--
current window $program == "Navigator" ==> tag web:$current.title,

-- Теги категории time-of-day для классификации по времени суток
$time >= 2:00 && $time < 8:00 ==> tag time-of-day:night,
$time >= 8:00 && $time < 12:00 ==> tag time-of-day:morning,
$time >= 12:00 && $time < 14:00 ==> tag time-of-day:lunchtime,
$time >= 14:00 && $time < 18:00 ==> tag time-of-day:afternoon,
$time >= 18:00 && $time < 22:00 ==> tag time-of-day:evening,
$time >= 22:00 || $time < 2:00 ==> tag time-of-day:late-evening,

-- Помечать над каким проектом работаю судя по заголовку окна.
-- Присваивать теги категории project.
current window $title =~ m!~/work/projectA! ==> tag project:projectA,
current window $title =~ m!~/work/projectB! ==> tag project:projectB,
-- ...
--

-- Помечать, какой тип текста я редактирую судя по заголовку окна.
-- Присваивать теги категории edit.
current window ($title =~ /^[^ ]+\.c .* - G?VIM.*$/) ==> tag edit:c,
current window ($title =~ /^[^ ]+\.py .* - G?VIM.*$/) ==> tag edit:python,
current window ($title =~ /^[^ ]+\.hs .* - G?VIM.*$/) ==> tag edit:haskell,
-- Когда использую suduedit
current window ($title =~ m!.*\(/var/tmp\) - G?VIM.*$!) ==> tag edit:config,
-- Когда редактирую что-то онлайн в Its All Text
current window ($title =~ m!.*/itsalltext\) - G?VIM.*!) ==> tag edit:itsalltext,

Для отчёта по определённой категории:
$ arbtt-stats -c имя_категории
Для просмотра отчётов по всем категориям:
$ arbtt-stats --each-category
Для ограничения выборки только записями с определённым тегом, например, last-hour, есть опция -o. Всё вместе:
$ arbtt-stats -o last-hour -c program -c edit
Statistics for category program
===============================
_____________Tag_|___Time_|_Percentage_
program:terminal | 29m00s | 48.33
program:gvim | 17m00s | 28.33
program:web | 13m00s | 21.67
program:Pidgin | 1m00s | 1.67

Statistics for category edit
============================
_____________Tag_|___Time_|_Percentage_
edit:itsalltext | 17m00s | 28.33
edit:haskell | 4m00s | 6.67
(unmatched time) | 39m00s | 65.00
В последнем примере я показал примерный вывод программы. Сразу видно, сколько времени за последний час я что-то редактировал и что именно и какие программы использовал. Писал эту заметку, в общем.

Кстати, arbtt есть не только в линуксовых репозиториях, но в скором времени (а может и уже) будет доступна и пользователям Windows.

Некоторые замеченные изъяны: arbtt-stats при печати портит заголовки окон с уникодом (патчем на 20 строк исправляется, должно быть ОК при сборке новым GHC), пока нельзя классифицировать по дням недели или по месяцам, сообщения о синтаксических ошибках в правилах очень невнятны.

Дополнение: замеченные недостатки, не без моего скромного участия, исправлены во время Хакатона в Цюрихе; используйте GHC 6.12 и устанавливайте новую версию 0.5; там всё ОК.

Приятных всем выходных!