данные,
ЛаТеХ
13 коммент.
В этом блоге публикуются заметки и решения, найденные в процессе работы, освоения и жизни в дистрибутиве Debian GNU/Linux.
$ svnadmin create /usr/local/svn/newreposнужно наполнить свежими данными. Для этого есть команда svn import это быстрый способ скопировать не версионированное дерево файлов в хранилище, например:
$ svn import mytree file:///usr/local/svn/newrepos/some/project \
-m "Initial import"
Adding mytree/foo.c
Adding mytree/bar.c
Adding mytree/subdir
Adding mytree/subdir/quux.h
Committed revision 1.
$ svn add temp A temp A temp/Lit_obzor2_edt.tex
$ svn status
? image
? biblio
? optcodeimages
M draft_PhD_Konnik.dvi
! PhD_Konnik.log
A temp
A temp/Lit_obzor2_edt.tex
! PhD_Konnik.toc
M PhD_Konnik_chapter_results.tex~
! PhD_Konnik_chapter_introduction.dvi
! PhD_Konnik.aux
! PhD_Konnik.bbl
! draft_PhD_Konnik.log
! PhD_Konnik.blg
! draft_PhD_Konnik.toc
! draft_PhD_Konnik.aux
! draft_PhD_Konnik.bbl
M PhD_Konnik.dvi
! draft_PhD_Konnik.blg
M PhD_Konnik_chapter_results.tex
! PhD_Konnik_chapter_introduction.log
$ svn update UЭто обновит вашу локальную копию до ревизии, которая находится в репозитории SVN. После этого можно приступать к работе с файлами, так как они обновлены до последней версии.
biblio/my.bib U
biblio/my.bib.bak
Updated to revision 9.
U fooUpdated — Файл foo был обновлен
A fooAdded — Файл или директория foo были добавлены в рабочую копию.
D fooDeleted — Файл или директория foo были удалены из рабочей копии.
R fooReplaced — Файл или директория foo была заменена в рабочей копии; это значит, что foo был удален, а новый элемент с таким же именем был добавлен.
G foomerGed — Файл foo получил новые изменения из хранилища, однако ваша локальная копия содержит ваши
изменения. Либо изменения не пересекаются, либо они точно такие же, как ваши локальные изменения, поэтому Subversion успешно выполнил слияние изменений хранилища с файлом.
C fooConflicting — Файл foo получил от сервера конфликтующие изменения. Изменения с сервера пересекаются с
вашими изменениями фала.
$ svn log --revision 1:3что значит: выдать лог ревизий с первую по третью. Увидим:
----------------------------------- r1 | penta4 | 2008-06-03 15:49:21 +0400 (Втр, 03 Июн 2008) | 1 line Initial dissertation state
-------------------------------- r2 | penta4 | 2008-06-03 16:56:01 +0400 (Втр, 03 Июн 2008) | 3 lines Committed new editions
--------------------------------- r3 | penta4 | 2008-06-03 16:58:12 +0400 (Втр, 03 Июн 2008) | 2 lines incremental ------------------------------------------------------------------------
$ svn diff --revision 2:4 PhD_Konnik.tex > PhD_Konnik.tex.diff.r2-4Это выведет нам в diff-файл все изменения, а ваш любимый текстовый редактор их с удовольствием подсветит для более удобного просмотра.
$ svn revert UMNIK08-Report-01/Report-01-sub1-shortened.texПосле этого SVN вернёт файл Report-01-sub1-shortened.tex в то состояние, в котором он находится в репозитории.
Reverted 'UMNIK08-Report-01/Report-01-sub1-shortened.tex'
$ svn mv MCBC/*jpg LinuxImages/приведёт к ошибке:
svn: Client error in parsing argumentsЧтобы не перемещать все файлы по одному, воспользуемся _ваша любимая оболочка тут_, в моём случае это Bash:
for i in *.cs ; do svn mv $i newFolder/ ; doneКонечно, если в вашей операционной системе есть нормальная консоль :-)
$ svn cat --revision 2 PhD_Konnik.tex > PhD_Konnik.tex.v2То есть выводим результат второй правки файла PhD_Konnik.tex и записываем его в файл PhD_Konnik.tex.v2 для дальнейшего просмотра.
HEAD, но продолжает существовать в более ранних правках. Так что вопрос "как восстановить удалённый файл в Subversion" имеет довольно простой ответ: скопировать его из последней правки, где он был.svn log -v | grep spatialcoh -A 5 -B 5Здесь параметры для grep такие: -A 5 это выдача 5 строк после (After) совпадения, -B 5 это 5 строк до (Before) совпадения. Получим длинный вывод вида:
spatialcoherencyexplained.eps 436 | penta4 | 2009-12-02 15:39:30 +0300 (Срд, 02 Дек 2009) | 2 linesКрасным подчеркнул я: видно, что файл spatialcoherencyexplained.eps удалён в правку 436, и теперь хотим его восстановить. Смотрим, в какой правке файл был удалён - в 436, значит, в 435 есть его последняя копия. Восстанавливаем:
Changed paths:
M /PhD_Konnik_autoreferat.tex
M /PhD_Konnik_chapter_opticalcoding.tex
M /PhD_Konnik_chapter_overview.tex
D /images-opticalcoding/spatialcoherencyexplained.eps
M /images-opticalcoding/sxemacorrelator3.eps
M /latex.py
M /svnstatus.tex
M /zagashnikPhD_Konnik.tex
--
M /biblio
A /formaldocs/disserDocs.tif.7z
A /images-opticalcoding/PSFdotssize.eps
M /images-opticalcoding/PSFoutofLambdaDeltaLambdavsfromNumberOfElementsPSFRus.ps
A /images-opticalcoding/auxilaryImagesForDisser.svg
A /images-opticalcoding/spatialcoherencyexplained.eps
M /zagashnikPhD_Konnik.tex
TENGIBLE changes:
- autoreferat is improved slightly;
- Spatial coherency is improved
svn copy --revision 435 file:///phdthesis/images-opticalcoding/spatialcoherencyexplained.eps spatialcoherencyexplained.epsВсё, теперь файл появится снова, вместе с историей правок (что важно) и вы можете его править дальше.
beast@notebeast:~$ exiftool IMG_0383.CR2
ExifTool Version Number : 6.57
File Name : IMG_0383.CR2
File Size : 8 MB
File Modification Date/Time : 2008:10:22 12:48:10
File Type : CR2
MIME Type : image/x-raw
Image Width : 1936
Image Height : 1288
Bits Per Sample : 8 8 8
Compression : JPEG (old-style)
Make : Canon
Camera Model Name : Canon EOS 400D DIGITAL
Preview Image Start : 79450
Orientation : Horizontal (normal)
Preview Image Length : 68724
X Resolution : 72
Y Resolution : 72
Resolution Unit : inches
Modify Date : 2008:10:15 15:44:26
Exposure Time : 1
F Number : 6.3
Exposure Program : Manual
ISO : 100
Exif Version : 0221
Date/Time Original : 2008:10:15 15:44:26
Create Date : 2008:10:15 15:44:26
Components Configuration :
Shutter Speed Value : 1
Aperture Value : 6.3
Flash : Off
Focal Length : 55.0mm
Macro Mode : Normal
Self-timer : 0
Quality : RAW
Canon Flash Mode : Off
Continuous Drive : Single
Focus Mode : Manual Focus
Canon Image Size : Unknown (-1)
Easy Mode : Manual
Digital Zoom : None
Contrast : Normal
Saturation : Normal
Sharpness : +3
Metering Mode : Center-weighted averaging
Focus Range : Not Known
Canon Exposure Mode : Manual
Long Focal : 55
Short Focal : 18
Focal Units : 1
Max Aperture : 5.6
Min Aperture : 32
Flash Activity : 0
Flash Bits : (none)
Focus Continuous : Unknown (8)
Zoom Source Width : 0
Zoom Target Width : 0
Photo Effect : Off
Color Tone : Normal
Focal Type : Zoom
Focal Plane X Size : 23.04mm
Focal Plane Y Size : 15.37mm
Auto ISO : 100
Base ISO : 100
Measured EV : -6.12
Target Aperture : 6.3
Exposure Compensation : 0
White Balance : Auto
Slow Shutter : None
Shot Number In Continuous Burst : 0
Flash Guide Number : 0
Flash Exposure Compensation : 0
Auto Exposure Bracketing : Off
AEB Bracket Value : 0
Focus Distance Upper : 0.77
Focus Distance Lower : 1
Bulb Duration : 0
Camera Type : EOS Mid-range
Auto Rotate : None
ND Filter : Unknown (-1)
Self-timer 2 : 0
Canon Image Type : Canon EOS 400D DIGITAL
Canon Firmware Version : Firmware 1.0.4
Owner's Name : unknown
Camera Body No. : 0730325266
Set Button Cross Keys Func : Set: Picture Style
Long Exposure Noise Reduction : Off
Flash Sync Speed Av : Auto
Shutter-AE Lock : AF/AE lock
AF Assist Beam : Emits
Exposure Level Increments : 1/3 Stop
Mirror Lockup : Disable
E-TTL II : Evaluative
Shutter Curtain Sync : 1st-curtain sync
Magnified View : Image review and playback
LCD Display At Power On : Display
Canon Model ID : EOS Digital Rebel XTi / 400D / Kiss Digital X
Num AF Points : 9
Canon Image Width : 3888
Canon Image Height : 2592
Canon Image Width As Shot : 3504
Canon Image Height As Shot : 2336
AF Points Used : (none)
Serial Number Format : Format 2
Original Decision Data : 0
File Number : 128-0000
Bracket Mode : Off
Bracket Value : 0
Bracket Shot Number : 0
Noise Reduction : Off
WB Bracket Mode : Off
WB Bracket Value AB : 0
WB Bracket Value GM : 0
Filter Effect : None
Toning Effect : None
Lens Type : EF-S18-55mm f/3.5-5.6
Internal Serial Number : H0885505
Dust Removal Data : (Binary data 1024 bytes, use -b option to extract)
Tone Curve : Standard
Sharpness Frequency : n/a
Sensor Red Level : 0
Sensor Blue Level : 0
White Balance Red : 0
White Balance Blue : 0
Color Temperature : 5200
Picture Style : Standard
Digital Gain : 0
WB Shift AB : 0
WB Shift GM : 0
Sensor Width : 3948
Sensor Height : 2622
Sensor Left Border : 52
Sensor Top Border : 23
Sensor Right Border : 3939
Sensor Bottom Border : 2614
WB RGGB Levels As Shot : 2236 1024 1024 1507
Color Temp As Shot : 5211
WB RGGB Levels Auto : 2236 1024 1024 1507
Color Temp Auto : 5211
WB RGGB Levels Measured : 2236 1024 1024 1507
Color Temp Measured : 5211
WB RGGB Levels Daylight : 2236 1024 1024 1507
Color Temp Daylight : 5200
WB RGGB Levels Shade : 2615 1024 1024 1253
Color Temp Shade : 7000
WB RGGB Levels Cloudy : 2427 1024 1024 1367
Color Temp Cloudy : 6000
WB RGGB Levels Tungsten : 1589 1086 1086 2509
Color Temp Tungsten : 3200
WB RGGB Levels Fluorescent : 1889 1034 1034 2126
Color Temp Fluorescent : 3769
WB RGGB Levels Kelvin : 2236 1024 1024 1507
Color Temp Kelvin : 5211
WB RGGB Levels Flash : 2479 1024 1024 1339
Color Temp Flash : 6262
WB RGGB Levels PC1 : 512 1024 1024 512
Color Temp PC1 : 4255
WB RGGB Levels PC2 : 512 1024 1024 512
Color Temp PC2 : 4255
WB RGGB Levels PC3 : 512 1024 1024 512
Color Temp PC3 : 4255
WB RGGB Levels Custom : 1201 1133 1133 5999
Color Temp Custom : 2400
User Comment :
Flashpix Version : 0100
Color Space : sRGB
Exif Image Width : 3888
Exif Image Length : 2592
Interoperability Index : R98 - DCF basic file (sRGB)
Interoperability Version : 0100
Focal Plane X Resolution : 4433.295
Focal Plane Y Resolution : 4453.608
Focal Plane Resolution Unit : inches
Custom Rendered : Normal
Exposure Mode : Manual
Scene Capture Type : Standard
Thumbnail Offset : 78336
Thumbnail Length : 1114
Photometric Interpretation : RGB
Samples Per Pixel : 3
Rows Per Strip : 256
Planar Configuration : Chunky
Strip Offsets : 443086
Strip Byte Counts : 7543495
Aperture : 6.3
Drive Mode : Single-frame shooting
Flash : Off
Image Size : 1936x1288
Lens : 18.0 - 55.0mm
Preview Image : (Binary data 68724 bytes, use -b option to extract)
Scale Factor To 35mm Equivalent : 1.6
Shooting Mode : Manual
Shutter Speed : 1
Thumbnail Image : (Binary data 1114 bytes, use -b option to extract)
WB RGGB Levels : 2236 1024 1024 1507
Blue Balance : 1.47168
Circle Of Confusion : 0.019 mm
Focal Length : 55.0mm (35mm equivalent: 85.9mm)
Hyperfocal Distance : 24.97 m
Lens : 18.0 - 55.0mm (35mm equivalent: 28.1 - 85.9mm)
Light Value : 5.3
Red Balance : 2.183594
exiftool -shutterspeed IMG_0383.CR2Для того, чтобы использовать exif-теги, надо запросить список тегов в которые возможна запись. Пишем:
Shutter Speed : 1
exiftool -listw IMG_0383.CR2
$ exiftool -City=Moscow IMG_0383.CR2И теперь:
1 image files updated
$ exiftool -City IMG_0383.CR2
City : Moscow
exiftool -City='Moscow Engineering Physics Institute' *.CR2С удовлетворением видим:
10 image files updated
exiftool -City *.CR2
======== IMG_0383.CR2
City : Moscow Engineering Physics Institute
======== IMG_0384.CR2
City : Moscow Engineering Physics Institute
======== IMG_0385.CR2
City : Moscow Engineering Physics Institute
======== IMG_0386.CR2
City : Moscow Engineering Physics Institute
======== IMG_0387.CR2
City : Moscow Engineering Physics Institute
======== IMG_0388.CR2
City : Moscow Engineering Physics Institute
======== IMG_0389.CR2
City : Moscow Engineering Physics Institute
======== IMG_0390.CR2
City : Moscow Engineering Physics Institute
======== IMG_0391.CR2
City : Moscow Engineering Physics Institute
======== IMG_0392.CR2
City : Moscow Engineering Physics Institute
10 image files read
# aptitude install kdesvn svnи все зависимости (здесь рассматривается svn v.1.4.2 из Debian GNU/Linux Etch). Через мгновение у нас уже будет установлена Subversion. Полдела сделано!
$ svnadmin create phdthesisВ текущем каталоге появится подкаталог phdthesis следующего содержания:
drwxr-xr-x 2 penta4 penta4 32768 2008-06-03 15:48 confКрасным подсвечены важные для нас каталоги: conf содержит конфигурационный файл репозитория (сейчас мы его немного допилим), а db содержит версии наших данных.
drwxr-xr-x 2 penta4 penta4 32768 2008-06-03 15:48 dav
drwxr-xr-x 5 penta4 penta4 32768 2008-06-03 18:55 db
-r--r--r-- 1 penta4 penta4 2 2008-06-03 15:48 format
drwxr-xr-x 2 penta4 penta4 32768 2008-06-03 15:48 hooks
drwxr-xr-x 2 penta4 penta4 32768 2008-06-03 15:48 locks
-rw-r--r-- 1 penta4 penta4 229 2008-06-03 15:48 README.txt
anon-access = writeТеперь любой аноним имеет права на запись в наш репозиторий - то есть вам не нужно ломать себе голову авторизацией и паролями (если, конечно, с проектом работаете вы один).
$ svn import -m "Initial dissertation state" file:///mnt/flash/other/phdthesis/Здесь указывается полный путь до репозитория. Каждый раз указывать его не нужно - скоро мы поднимем SVN-сервер одной левой, и наша жизнь станет ещё веселее.
Adding disser.insТо есть команда svn import берёт содержимое текущего каталога и помещает его в репозитарий, а так же все вложенные каталоги, если они есть. При этом выводится номер ревизии - это 1, наша первая правка.
Adding chapter.dtx
Adding kvoptions.ins
Adding (bin) draft_PhD_Konnik.dvi
Adding PhD_Konnik_chapter_introduction.tex
Adding PhD_Konnik_chapter_introduction.tex.backup
Adding PhD_Konnik.log
Adding PhD_Konnik.toc
Adding (bin) PhD_Konnik_chapter_introduction.dvi
Adding PhD_Konnik.tex
Adding (bin) PhD_Konnik.pdf
Adding (bin) PhD_Konnik.dvi
Committed revision 1.
3. Извлекаем и загружаем изменённые файлы в репозиторий
Для того, чтобы начать работать с файлами, переходим в какой-нибудь другой каталог и просим Subversion выдать нам последнюю копию из репозитория. Делается это так:
$ svn checkout file:///mnt/flash/other/phdthesis/в результате чего в текущем каталоге получим локальную копию данных из репозитория.
$ svn commit --message "minor edition in tex-files"После ключа --message пишем в кавычках короткое сообщение, чтобы отличать одну правку от другой. В процессе загрузки изменений Subversion будет выводить имена файлов, которые загружаются:
Sending PhD_Konnik.texГотово! Ревизия изменённых файлов зарегистрирована в репозитории. Вот так легко и просто начать работать с Subversion.
Sending draft_PhD_Konnik.tex
Transmitting file data ..
Committed revision 2
Ссылки
Очень толковая статья для начала есть тут, фундаментальный талмуд по возможностям Subversion лежит здесь.
aptitude install djview djvulibre-bin netpbmПри сканировании следует именовать файлы подряд так, чтобы они сортировались в порядке нумерации страниц. То есть вот так:
./any2djvu-bwЭта команда - вызов скрипта оболочки, текст которого приведён ниже:
Красным в скрипте выделена строчка, где определяется, какой формат файлов будет преобразован в DJVU. В данном примере это png.#!/bin/bash
#
# any2djvu-bw
#
if [ -z `which anytopnm` -o -z `which ppmtopgm` -o -z `which pgmtopbm`\
-o -z `which cjb2` ]; then
usage
echo "Error: anytopnm, ppmtopgm, pgmtopbm and cjb2 are needed"
echo
exit 1
fi
shopt -s extglob
# DEFMASK="*.jpg"
DEFMASK="*.png"
DPI=300
# uncomment the following line to compile a bundled DjVu document
OUTFILE="#0-bw.djvu"
function usage() {
echo
echo "usage:"
echo
echo "$0 [\"REGEXP\"]"
echo " converts single pages with the default mask $DEFMASK (or REGEXP if provided)"
echo " in the current directory to single-page black and white djvu documents"
# uncomment the following line to compile a bundled DjVu document
echo " and bundles them as a djvu file $OUTFILE"
echo
}
if [ -n "$1" ]; then
MASK=$1
else
MASK=$DEFMASK
fi
for i in $MASK; do
if [ ! -e $i ]; then
usage
echo "Error: current directory must contain files with the mask $MASK"
echo
exit 1
fi
if [ ! -e $i.djvu ]; then
echo "$i"
anytopnm $i | ppmtopgm | pgmtopbm -value 0.499 > $i.pbm
# in netpbm >= 10.23 the above line can be replaced with the following:
# anytopnm $i | ppmtopgm | pamditherbw -value 0.499 > $.pbm
cjb2 -dpi $DPI $i.pbm $i.djvu
rm -f $i.pbm
fi
done
# uncomment the following line to compile a bundled DjVu document
djvm -c $OUTFILE $MASK.djvu
#!/usr/bin/perl -w
my $i = 0;
my @cmds = qw[ djvm -c output.djvu ];
foreach ( <*.*> ) {
if (/(.*)\.jpg$/ ){
print "$_\n";
# system("c44", '-crcbfull', $1.'.jpg', $1.'.djvu');
system("cpaldjvu", $1.'.jpg', $1.'.djvu');
$i++;
push @cmds, $1.'.djvu';
}
elsif (/(.*)\.tif$/ ) {
print "$_\n";
# установить 300 dpi в tiff'e
#system("tiffset", '-s 296 2', $1.'tiff');
#system("tiffset", '-s 282 300.0', $1.'tiff');
#system("tiffset", '-s 283 300.0', $1.'tiff');
# или
# system("cjb2", '-dpi', '300', '-losslevel', '100', $1.'.tiff', $1.'.djvu');
system("cjb2", $1.'.tif', $1.'.djvu');
$i++;
push @cmds, $1.'.djvu';
}
}
print "$i files renamed\n";
system(@cmds);
print "\n$cmds[2] created";
./pdfs2djvuЭто тоже скрипт на баше, код которого такой:
#!/bin/bash
#
# pdfs2djvu
#
if [ -z `which pdftoppm` -o -z `which cjb2` -o -z `which djvm` ]; then
echo
echo "Error: pdftoppm, cjb2 and djvm are needed"
echo
exit 1
fi
shopt -s extglob
OUTFILE="#0.djvu"
DEFMASK="*.pdf"
DPI=600
if [ -n "$1" ]; then
MASK=$1
else
MASK=$DEFMASK
fi
for PDF in $MASK; do
if [ ! -e $PDF ]; then
echo
echo "Error: current directory must contain files with the mask $MASK"
echo
exit 1
fi
echo $PDF
pdftoppm -mono -r 600 -aa yes $PDF $PDF
for PBM in $PDF*.pbm; do
echo $PBM
cjb2 -dpi $DPI $PBM $PBM.djvu
rm -f $PBM
done
done
djvm -c $OUTFILE $MASK*.pbm.djvu
# mount -t vfat /dev/sda1 /mnt/sda1Перегоняем данные с одного винчестера на другой. Так как данных много, полезно их сжать - и никс-системы позволяют это делать "на лету". В примере использван GZip, но подойдёт и любой другой (например, bzip2 или p7zip).
# dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.img.gzЗдесь происходит архивирование с одновременным сжатием, результат чего записывается в файл hda.img.gz
# dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c | ssh -c blowfish user@hostname "dd of=hda.img.gz bs=64k"Архивный файл появится в домашней директории пользователя user на машине hostname. Если сеть маленькая, лучше вместо hostname использовать просто ip-адрес. Опция -c blowfish заставляет SSH выбрать алгоритм шифрования Blowfish, который быстрее остальных шифрует данные.
# dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c | nc 192.168.1.1 3333На удалённой машине должен быть запущен netcat:
# nc -l -p 3333 > hda.img.gzВариант с SAMBA, если копирование производится на оффтопичную машину: примонтировать удалённо сетевой ресурс
smbmount //192.168.1.100/shared /mnt/remoteshare -o username=имяпользователя,password=парольи далее всё то же, что и в п.2.1.
# gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64KВсе параметры в п.2 уже объяснены.
dd if=hda.img.gz | ssh -c blowfish user@deadhost "gunzip -c | dd of=/dev/hda1 bs=64k"conv=sync,noerror в опциях dd - если вы всё-таки включите эту опцию, в большинстве случаев это исказит записываемые данные (это заставляет dd не дожидаться данных, приходящих по сети, если целый блок недоступен).
g++ -o close close.cppВсё, даём ей права на исполнение, вставляем в привод диск с неудачно закрытой сессией и пишем:
close /dev/hdaЕсли /dev/hda ваш пишущий DVD-привод, конечно. После этого диск будет закрыт, его можно прочесть и он проходит проверку MD5-сумм.
dvd+rw-format -lead-out /dev/scdNДолжно работать и для обычных DVD-R дисков.
dcraw -4 -D -T img0001.cr2
Несмотря на то, что значения, получаемые с фотосенсора, линейно зависят от времени экспозиции постоянного источника света, при подходе к теоретическому пределу значений отклик фотосенсора становится нелинейным. Значение насыщения меньше теоретического предела АЦП: например, для 12-битного АЦП, применяющегося в большинстве современных зеркальных камер, предел экспериментально получаемых значений меньше теоретического на 10-20%.
Для выяснения точки насыщения фотокамеры следует использовать стабильный световой источник и, возможно, ослабляющие оптические стёкла. В качестве осветителя хорошо подходят светодиодные фонари: стабильные по мощности, яркие и с широким спектральным составом. Объектив следует снять. После этого делаются экспозиции с равным шагом в RAW-формате.
После этого в системе численных математических расчётов MATLAB / Octave обрабатываются снимки по выделенной области интереса: анализируется ход среднего значения по области интереса и дисперсия значений в выбранной области. Это позволяет узнать, насколько линеен фотоприёмник камеры и при каких значениях освещённости начинается насыщение.
Как видно из хода зависимостей, на уровень насыщения, который равен значению 13826 из 16384, сенсор фотокамеры Canon D40 выходит плавно, и до уровня 12000-13000 зависимость от интенсивности зарегистрированной освещённости можно считать линейной с достаточно хорошей точностью (см.рис.1). В качестве погрешности отложено стандартное отклонение данных плоского поля размером 64х64 отсчёта.
Данные о шумах для камеры Canon 40D
Для этих целей следует использовать экспозицию с закрытой крышкой. Данные, полученные в ходе обработки таких данных, позволяют судить о росте уровня шума в зависимости от экспозиции и ISO. Следует отметить, что усиление сигнала (соответствующее значению ISO) происходит до записи изображения в RAW-файл. С возрастанием величины усиления возрастают и шумы.
На рис.2 приведена зависимость среднего значения сигнала темнового кадра от ISO и стандартное отклонение этих значений при постоянном времени экспозиции. Видно, что стандартное отклонение возрастает с изломами (возможно, используется многоступенчатый АЦП).
На рис.3 представлены зависимости величины шума (стандартное отклонение пикселей при многократном усреднении одной и той же сцены для разных величин пикселей) от сигнала.
Рис.4: Зависимость сигнала от шума для данных,
По нашим данным, при обработке получаемых изображений конвертером DCRAW, можно оценить полный динамический диапазон как 56 dB и линейный динамический диапазон как 52 dB.
Это очень хороший результат для бытовой камеры, т.к. аналогичное устройство класса "scientific graduated" стоит как минимум в 3-4 раза дороже. Так что Canon 40D можно вполне использовать в любительской астрономии и в качестве фоторегистратора в оптических экспериментах.
1.6593991e+00 1.6523134e+00 1.6407763e+00Нужно построить цветной график, с подписями на осях по-английски, шрифт Helvetica. Вот что у меня получилось:
1.8986703e+00 1.8667678e+00 1.8595763e+00
2.6304331e+00 2.5340401e+00 2.4999678e+00
4.2843754e+00 4.0227936e+00 4.0423230e+00
7.6136102e+00 7.0438436e+00 7.1057056e+00
#! /usr/bin/gnuplot -persist
set terminal postscript eps enhanced color solid
set output "~/matlab/programs/kmvdecoder/plots/1NoiseRAWSTDtoISOnoisecomparing.ps"
set xlabel "ISO number" font "Helvetica,18"
set bmargin 4
set ylabel "Pixels standard deviation" font "Helvetica,18"
set yrange [0:50]
set key top left
set xtics ("100" 0,"200" 1,"400" 2,"800" 3,"1600" 4)
set style line 1 lt 1 pt 9
set style line 2 lt 3 pt 7
set style line 3 lt 2 pt 5
plot "~/matlab/programs/kmvdecoder/plots/RAWSTDmeasurementresult" using 1 title "RAW data, Red channel" with linespoints linestyle 1,"~/matlab/programs/kmvdecoder/plots/RAWSTDmeasurementresult" using 2 title "RAW data, Green channel" with linespoints linestyle 3,"~/matlab/programs/kmvdecoder/plots/RAWSTDmeasurementresult" using 3 title "RAW data, Blue channel" with linespoints linestyle 2
Вот, кстати, почему и зачем у меня появился в своё время пост о вертикальной конкатенации: мне нужно было добавить в файл данных ещё один ряд, полученный при других измерениях. После этого можно скармливать новый файл данных гнуплоту и он будет воспринимать это как новый ряд.Ничего демонического, как видите, в гнуплоте нет. А вот и результат наших стараний:

Следует отметить, что, вопреки распространённому заблуждению, gnuplot выдаёт графики с publication-ready качеством, которые без вопросов принимаются в любом зарубежном (и уж тем более местном) научном журнале. Например, NASA с помощью gnuplot создаёт карты погоды, а некоторые математические системы (типа MATLAB) просто используют куски кода gnuplot чтобы отрисовывать графики. Так что график, который выдаст гнуплот, в любом случае на порядок краше того, на что способен ексель или Openoffice.org Calc.
When Slax is unpacked to your device, it will create '/boot/' and '/slax/' directories there. Only one more step is needed to make Slax boot from your USB device or disk: you have to manually navigate to the newly created /boot/ directory and run bootinst.sh script (if you are in Linux) or bootinst.batscript (if you are in Windows).
The method mentioned above will simply install syslinux bootloader to your device's MBR (master boot record). Syslinux works only on FAT filesystem (which is widely used on most USB
flash keys, Cameras and MP3 players). If your device or disk is formated using a different filesystem (it is strongly recommended to use a native Linux filesystem like XFS), you will have to use 'liloinst.sh' script instead.Currently, liloinst doesn't provide the same nice boot menu like syslinux, but this will be implemented soon.
$ cat RAWMAXmeasurementresult
2.7100000e+02 2.8300000e+02 2.8000000e+02
2.7300000e+02 2.8700000e+02 2.8400000e+02
2.7400000e+02 2.9600000e+02 2.9000000e+02
2.7800000e+02 3.0400000e+02 2.9800000e+02
$ cat shutterНужно сделать так, чтобы в результате получился файл типа:
.00024414062500000000
.00031661600810536980
.00037652020030874656
.00048828125000000000
2.7100000e+02 2.8300000e+02 2.8000000e+02 .00024414062500000000Так проще строить графики в гнуплоте, что в скриптах реализуется сравнительно просто.
2.7300000e+02 2.8700000e+02 2.8400000e+02 .00031661600810536980
2.7400000e+02 2.9600000e+02 2.9000000e+02 .00037652020030874656
2.7800000e+02 3.0400000e+02 2.9800000e+02 .00048828125000000000
$ paste -d " " RAWMAXmeasurementresult shutter > ourendresultИ вся любовь.
#! /usr/bin/perl
use strict;
use warnings;
my $kmvSourceFileName="RAWMAXmeasurementresult"; ## File that will be expanded by adding data
my $kmvTargetFileName="shutter";## File to be added to source file
my @kmvSourceFile =`cat $kmvSourceFileName`; ## file content
my @kmvTargetFile =`cat $kmvTargetFileName`;
my $kmvMaxIndexSourceFile = scalar @kmvSourceFile; ## how many elements in massive?
for (my $ii=0; $ii<$kmvMaxIndexSourceFile; $ii++)
{
if (index($kmvSourceFile[$ii], "\n")>0) ## if there is end-of-line symbol - remove it from source line
{
chop $kmvSourceFile[$ii];
}
$kmvSourceFile[$ii] = $kmvSourceFile[$ii]." ".$kmvTargetFile[$ii];
}
my $kmvResultFileName = $kmvSourceFileName.$kmvTargetFileName;
open(DATA, "+>$kmvResultFileName");##Открываем файл, куда пишем тестовые результаты
print (DATA @kmvSourceFile); ## Сюда пишем тестовые результаты
close(DATA); ##Закрываем файл, куда пишем тестовые результаты
outguess - Universal Steganographic toolЧего с лихвой хватит для любых параноидально одержимых приватностью своих данных граждан.
stegdetect - Detect and extract steganography messages inside JPEG
steghide - A steganography hiding tool
snowdrop - plain text watermarking and watermark recovery

$ steghide embed -ef autobio.txt -cf MacOS.jpg -sf MacOShide.jpgТо есть внедряем файл autobio.txt (ключ -ef, embed file) внутрь рисунка MacOS.jpg (ключ -cf, cover file), в результате чего имеем рисунок со внедрённым стего под названием MacOShide.jpg (ключ -sf, stego file). При этом прогамма спросит дважды пароль:
Enter passphrase:Всё готово, вот в этом рисунке весь мой жизненный путь за четверть века :-)
Re-Enter passphrase:
embedding "autobio.txt" in "MacOS.jpg"... done
writing stego file "MacOShide.jpg"... done
$ steghide extract -sf MacOShide.jpg -xf autobio2.txtТо есть извлечь из стего-файла MacOShide.jpg скрытую информацию в файл autobio2.txt (ключ -xf, extract file). Утилита будет лаконична:
Enter passphrase:Готово, файл записан.
wrote extracted data to "autobio2.txt".
>> kmvRMSandnorm('MacOS.jpg', 'MacOShide.jpg')Да, ну разумеется, такую разницу в изображении мы не увидим, даже если будем пристально вглядываться: всего отличие всего лишь на 0.32%! Отличия между изображениями можно увидеть, не сильно напрягаясь, где-то при 3-5%.
ans =
0.0032
$ md5sum MacOS.jpgТак что изменения, конечно, есть, но очень небольшие - на глаз не заметить, так что можно смело переправлять личную информацию по электронной почте, даже если её просматривает злобный админ.
da6d7d25d5560fb22eb9d2f6ca09417f MacOS.jpg
$ md5sum MacOShide.jpg
87a02d9714ed43f49d2aeb37c4e75d94 MacOShide.jpg
Материалы сайта «Записки дебианщика» написаны virens’ом и доступны на условиях лицензии Creative Commons Attribution-Non-Commercial-Share Alike 3.0 Unported License. Вы можете копировать, распространять, показывать эту работу, и создавать производные работы в некоммерческих целях на условиях:
1) обязательной ссылки на автора (virens, http://mydebianblog.blogspot.com/);
2) распространении любых производных работ на условиях этой же лицензии (ссылка на эту лицензию обязательна!).
Пожалуйста соблюдайте условия лицензии Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License. Авторские права - Михаил Конник aka virens.