Свежие комментарии

Title Comment
ну вот в исследованиях кажется Ильи Борга, обнаружился клипп

ну вот в исследованиях кажется Ильи Борга, обнаружился клиппинг в тенях на ISO 200 у Sony A900, в практическом плане выражавшийся в красных "блямбах" на темных поверхностях, а на ISO 320 клиппинг вдруг исчезал, из чего Илья (кажется) делал вывод что базовое ISO у A900 не 200 а 320.

>Попытка использовать шумодавы тем более всё усугубляет.

Так надо blacks подвинуть вправо -- и всех делов. "крайние" тона -- они неточные что сверху что снизу...

В тенях сигма порядка 6. Т.е. работать с сигналом меньше 6 (

В тенях сигма порядка 6.
Т.е. работать с сигналом меньше 6 (после вычитания черного) вообще не надо.
А значимая нелинейность уже есть у сигнала с величиной 20-25.

Т.е. эффективная "примерно линейная" область - 9 стопов. От 26 до 14700.

Это ISO100, мне оно под руку первое попалось.

>отношение сигнал/шум на диапазоне 5000-14700 (верхние полто

>отношение сигнал/шум на диапазоне 5000-14700 (верхние полтора стопа) перестает падать
в смысле - перестает? шум (мощность шума) растет вместе с сигналом?

>120 - это корень из значения (14700).
не понял - зачем брать квадратный корень из [максимального] значения сигнала?
наверное у меня какие-то пробелы в математике...

>И пуассоновское распределение при большом числе самплов - "переходит" в нормальное.
а в википедии :) написано "Сумма независимых пуассоновских случайных величин также имеет распределение Пуассона"

Этот эффект проявляется в тенях гораздо сильнее, если пытать

Этот эффект проявляется в тенях гораздо сильнее, если пытаться эти тени вытягивать.

Предположим, есть теневой участок. У Canon уровень черного порядка 1000, я эту цифру возьму как условную. Предположим, совсем черный цвет - это, может, 1002, может 1000, может 998.

Теперь мы вычитаем 1000. У нас пиксели 2, 0, 0. Всё, приехали. Относительная ошибка не треть стопа.

Жизненная ситуация - фотография ночью, при свете ламп. Баланс белого вытягивает синий канал. По нему тени становятся светлее, в результате вся картинка как бы уходит в светлоту.

Попытка использовать шумодавы тем более всё усугубляет. Они все работают в пространстве gamma 2.2, в результате берут среднее. Цвета плывут.

120 - это корень из значения (14700). Для Пуассононовского р

120 - это корень из значения (14700). Для Пуассононовского распределения (фотонный шум) - в самый раз.
И пуассоновское распределение при большом числе самплов - "переходит" в нормальное.

А вот то, что отношение сигнал/шум на диапазоне 5000-14700 (верхние полтора стопа) перестает падать - меня удивляет и я думаю.

120 (или вовсе 250-260) - как-то очень уж много. указанные

120 (или вовсе 250-260) - как-то очень уж много.

указанные 16% - это в случае нормального распределения. а оно нормальное?

этот эффект (клиппинга), это считай - нелинейность "в самых самых верхах" с понятным законом.

а уже имеющиеся нелинейности (если есть) в самых верхах не больше ли эффекта связанного с клиппингом?

Ну да, мантиссы - 24 бита (не

Ну да, мантиссы - 24 бита (не помню, включает это знак или нет, но скорее всего 23 бита и знак). Это в float.
А в double - битов 48 или около того.

Но в float - 4 действия, а в double - одно, при этом double всего-то вдвое медленнее.

Вот только компьютера мне у

Вот только компьютера мне у телевизора не хватает. Да еще и с внешним блоком питания.

бинарное сложение

практикуют с этой целью маньякусы.
Т.е. из 2**К чисел получают 2**(К-1) промежуточных сумм (попарных) итд итп ипкнх.

У меня проблема в другом! Я

У меня проблема в другом!
Я хочу через миксовтовском трансивер подключить к примеру блютус гарнитуру.
и нечего не получается
зато мышка другая блютусная цепляется как роднай маикросовтовская
Вообщем странная система

ASRock Vision 3D

Ты уже купил Дюну, но я всё равно скажу.
Я тут себе взял ASRock Vision 3D ( http://www.asrock.com/Nettop/overview.asp?Model=Vision%203D%20Series ) и очень им доволен.

Скока той мантиссы? Если мне

Скока той мантиссы? Если мне не изменяет память 24 бита. А скока их в а? 26? И ошибка в единичку (можно и в ноль свести при последующих вычислениях). Шайтан однако. :-)
Кстати gcc -O отличное от ноль тоже интересно.

Но в общем все правильно.

В вариации float/double (у

В вариации float/double (у обоих есть аппаратная поддержка) - это бессмысленно.

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

Но если не хватает double, то да, спасет.

У нас на факультете геофизики

У нас на факультете геофизики очень любили (и, возможно, до сих пор любят) Sun-ы за 128-битный float.

У меня это место подетектилось только когда я в варез загнал

У меня это место подетектилось только когда я в варез загнал заранее известные *константные* значение (то самое 59259).

Так как там минимум-максимум-среднее выводятся рядом, то вот оно и вылезло.

Хех, люблю я хитрые задачки) Делаем вот что: <pre> float v

Хех, люблю я хитрые задачки)
Делаем вот что:

float v = ((unsigned short)59259);
printf("v=%0.023f\n",v);
float a=0.0f;
double b=0.0;
bool bl=false;
for(int i=0;i<33*33;i++){
a+=v;
b+=v;
if (283==i) printf("a=%0.023f, b=%0.023f, i=%d\n",a,b,i);
if (a!=b && !bl){
bl=true;
printf("a=%0.023f, b=%0.023f, i=%d\n",a,b,i);
}
}
printf("%g\n",(a-b)/(33*33));

И получаем вывод такой:

v=59259.00000000000000000000000
a=16829556.00000000000000000000000, b=16829556.00000000000000000000000, i=283
a=16888816.00000000000000000000000, b=16888815.00000000000000000000000, i=284
0.73921

Т.е. прибавление фиксированного числа на 284 итерации прибавляет неправильно. Присмотревшись к диапазону чисел замечаем, что это однако близко к 0x1000000, то бишь 2^24, а мантисса у флоата как раз такая же. Далее дорогой гугл приводит нас на не менее дорогой StackOverflow, так же не менее дорого Джоэла Спольски, а уже там нам старшие товарищи подсказывают вот что:

In single precision floating point there are only 24 bits of precision available, and 2^24 is 16777216. There is no way to encode 16777217 in 24 bits, so it simply stays at 16777216, on the reasoning that it's close enough to the real answer. The real problem arises when you add lots of very small numbers to a big number, where the sum of the small numbers is signifiant relative to the big one, but individually they are not.

Note that 16777216.0f is not the largest number that can be represented in float, but just represents the limit of precision. For example, 16777216.0f x 2^4 + 2^4 => 16777216.0f x 2^4

double has 53 bits of precision, so can encode up to 2^53, or 9007199254740992.0 before hitting the point where adding 1.0d fails.

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

Спасибо за полезную задачку, мне с флоатингом тоже дел много иметь приходится, и я тоже немного знаю теорию, но вот практика - да, практика всё, а пока с такими вещами похоже не сталкивался)

Все чаще убеждаюсь, что все

Все чаще убеждаюсь, что все уже придумано до нас. :-)


main ()
{
unsigned short v=59259;
float a=0.0f;
double b=0.0;
// float divider=100000.0;
// float divider=50000.0f;
float divider=1.0;
int i;

float c = 0.0f; //A running compensation for lost low-order bits.
float t;
float y;
float sum = 0.0f;

for(i=0;i<33*33;i++)
{
a+=v/divider;
b+=v/divider;
}
a*=divider;
b*=divider;
printf("%.15g a=%.15g b=%.15g a-b=%.15g int=%d iter=%d\n",(a-b)/(33*33), a, b, a-b, v*33*33, 33*33 );

// Vsjo pridumano do nas
a=0.0f;
b=0.0;
for(i=0;i<33*33;i++)
{
// a+=v; // see below
y = v - c; //So far, so good: c is zero.
t = sum + y; //Alas, sum is big, y small, so low-order digits of y are lost.
c = (t - sum) - y; //(t - sum) recovers the high-order part of y; subtracting y recovers -(low part of y)
sum = t; //Algebraically, c should always be zero. Beware eagerly optimising compilers!
//Next time around, the lost low part will be added to y in a fresh attempt.
b+=v;
}
a = sum;
printf("%.15g a=%.15g b=%.15g a-b=%.15g int=%d iter=%d\n",(a-b)/(33*33), a, b, a-b, v*33*33, 33*33 );

}

0.73921028466483 a=64533856 b=64533051 a-b=805 int=64533051 iter=1089
0.000918273645546373 a=64533052 b=64533051 a-b=1 int=64533051 iter=1089

Правда операций чуть побольше.

Теорию я, типа, знаю. Но практика смешная: исходное 16-бит

Теорию я, типа, знаю.

Но практика смешная: исходное 16-битное число в 23-битную мантиссу лезет точно (во всяком случае, обратно печатается как надо, побитовое представление я не проверял). Итераций ~2^10 т.е. должно накопиться бита три ошибки. А накапливается - битов шесть.

Раскладец.

В-общем, получается так, если не по формальным спекам, а по

В-общем, получается так, если не по формальным спекам, а по наличию в магазинах: салазок для C200, которые позволяют и BD и 3.5" диск поставить - в Москве нет.
Более того, там где такие штуки обычно были (mnt.ru) - я тоже что-то не нашел.

А у Дюны Max - про это голова не болит т.к. отсеки разные.

Зато в Дюну не ставится (пока?) Mini-PCI Wifi, USB-шные, по слухам, медленнее, т.е. про HD по воздуху придется забыть скорее всего. Ну и хрен с ним, значит, будем приносить на HDD.

Действительно, практически равнозначные устройства. Но, попк

Действительно, практически равнозначные устройства. Но, попкорн более открыт с точки зрения программирования. Обычно, это не критерий, люди хотят просто бытовое устройство, но вдруг? :)

А я тут давеча слышал вопль

А я тут давеча слышал вопль души по направлению к Интел и АМД "ну когда же в процессорах будет поддержка четверной точности". Не хватает кое-кому уже double.

Да просто перешел на double - и все.

Да просто перешел на double - и все.

Иманна-иманна... Вот <a href='http://www.eecg.toronto.edu/~

Иманна-иманна...

Вот тут или на худой конец тут как гриццо совершенно famous article на этот счёт

Блин, второй час ночи. Единственное, что удалось сделать, э

Блин, второй час ночи.
Единственное, что удалось сделать, это из 7 десятых 2 десятых на 1000 сложений. На 20000 разница жуткая.
Расскажите, как выйдете из ситуации, если будет свободное время, пожалуйста.

Да, лажаю. :-(

Да, лажаю. :-(

ф читать как a :)

ф читать как a
:)

Я не понимаю вашего кода. Вот смотрите: float avg=0.0f;

Я не понимаю вашего кода. Вот смотрите:
float avg=0.0f;
int i;
for(i=0;i<1000;i++)
{
float a = i;
if(i) { avg = (avg+a)/2.0f; } else { avg+=ф;}
}
printf("%g\n",avg);

Это же то же самое делает?

Но оно не среднее печатает, отнюдь.

Неаккуратненько. if(i){ averfa=(v+averfa)/2.0f;} else {averf

Неаккуратненько.
if(i){ averfa=(v+averfa)/2.0f;} else {averfa+=v;}
Сорри.

<i>Я думал, что libraw, в перспективе, и претендует стать са

Я думал, что libraw, в перспективе, и претендует стать самостоятельным raw процессором.

Нет-нет. Эту тему мы обсуждали в самом начале и решили что нет, не претендуем. RAW-процессор *как библиотека* (т.е. приделывай свой GUI и радуйся) это какая-то неправильная штука. Или она будет слишком generic (и потому - медленной), либо там нужна какая-то строгая идеология процессинга, а тогда и GUI можно приделать свой (и исходники открывать необязательно).

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

unsigned short v=59259; float a=0.0f; double b=0.0;

unsigned short v=59259;
float a=0.0f;
double b=0.0;
float averfa=0.0f;
double averdb=0.0;
char ahtung=' ';
for(int i=0;i<1089;i++)
{
if(i){ averfa=(v+averfa)/2.0;} else {averfa+=v;}
if(i){ averdb=(v+averdb)/2.0;} else {averdb+=v;}
a+=v;
b+=v;

if (a!=b) ahtung='!';
cout << i << " " << a << " " << b << " " << ahtung << " " << averfa << " " << averdb << "\n";
}

1087 6.44746e+007 6.44738e+007 ! 59259 59259
1088 6.45339e+007 6.45331e+007 ! 59259 59259
0.73921a = 6.45339e+007b = 6.45331e+007

Хмм? В один проход?

Pages

Subscribe to comments_recent_new