А что, собственно, в методике не понятно? Мы пытаемся определить степень однородности картинки. Т.е., чем меньше количество пикселей отличных от цвета картинки в целом, и чем на меньшее значение отличается их цвет от цвета картинки в целом - тем лучше, т.е. тем меньшее значение средного отклонения мы получим. Недостатки данного подхода уже отмечались выше, если есть некий градиент картинки или присутствует фактура, то у нас возникнет разброс в цвете пикселей, которые будет обусловлен не шумами.
Но, например, при фотографировании с закрытой крышкой объектива - никакого градиента нет и фактуры тоже. Имеющий место разброс в цвете это есть шумы матрицы в чистом виде. Природа шумов объясняется тем, что неврзможно сделать несколько миллионов сенсоров абсолютно идентичных по своим показателям. Возникающий на сенсорах электрический потенциал, будет различен. Чем более однородные сенсоры - тем выше качество матрицы. Сенсоры могут отличаться от полностью неработоспособных - "битые" до обладающих повышенной чувствительностью "горячие".
Конечно, как писали выше, хорошо бы исследовать качество сенсоров анализируя RAW файл, но к сожалению структура RAW у всех производителей своя (см. ресурс OPENRAW.COM), я некоторые вообще не раскрывают ее.
Но и анализ JPEG картинки все равно позволяет судить о качестве матрицы. Если в JPEG появилась точка отличная от цвета общего фона, то это ведь не просто так, а значит в окрестностях этой точки присутствуют сенсоры с аномальной светочувствительностью.
Зависимость накопленного потенциала на сенсоре от интенсивности и длительности его освещения для каждого своя. Кроме того, она нелинейна (потенциал на сенсоре нелинейно зависит от попавшего на него света и длительности экспонирования). Если бы эта зависимость была линейной, то возможно было бы откалибровать матрицу один раз - и мы получили бы полное отсутствие шума при любой съемке.
Но несмотря на то, что она нелинейна, некоторые "особенно горячие" пиксели вылезают на картинке практически при любом сюжете, будь то закрытая крышка объектива или синее небо, или белый потолок. То есть, если мы найдем на картинке, сделанной с закрытой крышкой особенно горячий пиксель (запомним его координаты), а потом посмотрим обычную фотографию, то в окрестностях этой точки тоже будет повышена аномальность цвета.
Тестируем уровень шумов матрицы своих фотоаппаратов
Всего 33 сообщ.
|
Показаны 21 - 33
Re: Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
Re: Re: Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
А чем не устраивают тесты шумов на том же dpreview (если уж так охота получить эти цифры)? Или настолько нечем заняться, что охота придумать самое бестолковое занятие? :D
Пардон, если что. Только ведь и в самом деле ничего нового Вы не откроете...
Пардон, если что. Только ведь и в самом деле ничего нового Вы не откроете...
Re: Re: Re: Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
В jpeg шумы не увидишь по определению. Там алгоритмы сжатия такие. Часть информации, "ненужной" глазу или чему угодно еще этот формат теряет. Именно поэтому картинки в получаются маленькими по размеру.
Если объяснять на пальцах, то это выглядит так: Есть некая функция, заданная скажем в 1000 точках. Далее мы ее раскладываем в ряд Фурье, и все члены после 50 откидываем нафиг. Получили из 1000 чисел - 50. Сжали в 20 раз с потерей качества. Насколько точно - зависит от функции. Если это изначально был синус - то все замечательно, а если там были какието пики и неровности, то все это мы потеряем. Так что jpeg сам по себе часть шумов гасит. То есть сфотографировать объект, занимающий на матрице 1 пиксель не получится в принципе.
Если объяснять на пальцах, то это выглядит так: Есть некая функция, заданная скажем в 1000 точках. Далее мы ее раскладываем в ряд Фурье, и все члены после 50 откидываем нафиг. Получили из 1000 чисел - 50. Сжали в 20 раз с потерей качества. Насколько точно - зависит от функции. Если это изначально был синус - то все замечательно, а если там были какието пики и неровности, то все это мы потеряем. Так что jpeg сам по себе часть шумов гасит. То есть сфотографировать объект, занимающий на матрице 1 пиксель не получится в принципе.
Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
Программа работает не коректно ФШ лучше, нулей быть не может иначе это происки програм корек ФА
((не нужно усреднять значения шума их нужно накапливать))
Загоните картинку в ФШ и поставте контраст на +98 а яркость на +2 и всё встанет на свои места :)
((не нужно усреднять значения шума их нужно накапливать))
Загоните картинку в ФШ и поставте контраст на +98 а яркость на +2 и всё встанет на свои места :)
Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
По-моему - идея тестирования сама по себе хорошая. К сож, аппарат дома - а я на работе, так что только вечером смогу протестировать программу :)
Вместо того, что бы брызгать слюнями - предложили бы свою методику для простого анализа качества матриц. Все усложнить и дурак сможет, а вот упростить - тут уже голова нужна :)
Вместо того, что бы брызгать слюнями - предложили бы свою методику для простого анализа качества матриц. Все усложнить и дурак сможет, а вот упростить - тут уже голова нужна :)
Re: Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
от:Andrew72
По-моему - идея тестирования сама по себе хорошая. К сож, аппарат дома - а я на работе, так что только вечером смогу протестировать программу :)
Вместо того, что бы брызгать слюнями - предложили бы свою методику для простого анализа качества матриц. Все усложнить и дурак сможет, а вот упростить - тут уже голова нужна :)Подробнее
Вам же объясняют, что анализ jpeg-а НИЧЕГО не скажет ни о качестве матриц, ни о качестве фотоаппарата в целом.
Можно, например, заложить в процессор камеры супер-агрессивный шумодав и тогда подобная программа выдаст замечательные результаты!!!. Только на реальных фотографиях всё будет очень печально... :D
Re: Re: Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
от: vvkot
А что, собственно, в методике не понятно?
можно механическую аналогию?
Вот например мы решили описать процесс прыгания мячика, бросаем его на землю и замеряем высоту отскока. Как вы думаете, сможем ли мы что либо путнее выяснить, если исключим из рассмотрения массу мячика, характеристики материала (упругость например)? Т.е. мы сможем построить кривую зависимости высоты отскока от высоты падения, но даст ли нам это что либо в изучении свойств этого мячика? А если мы не учитываем силу броска, то и этого мы сделать не сможем.
При изучении некоего явления, надо, наверное, опираться на природу этого явления, нет? А где у вас описание природы шума?
С чего вы взяли, что фото белого листа даст нам картину шумов матрицы? Почему не красного, зеленого, синего? Почему бы вообще не поснимать что-либо реальное, в конце концов нас интересуют шумы в реальных фотографиях?
Re: Re: Re: Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
Вняв разумным рекомендациям программу кардинально переделал. А именно теперь анализируется картинка отдельно по каналам R, G, B. Причем на выходе получаем не некоторое число, которое непонятно как толковать, а количество аномальных пикселей в каждом из каналов. Порог можно менять от 1 до 254 (т.е. во всем диапазоне уровня канала). При отклонении цвета в канале выше порога пиксель считается аномальным.
см. скрин.: http://spnet.ru/~nasa/NoiseTester3.JPG
(Прогу до конца затестирую и выложу тоже)
Насчет того, что не может быть нулей. А же выкладывал JPEG скаченный с камеры. Можете посмотреть его в ШОПЕ.
Так вот у него для 8 миллионов пикселей, есть 2909 точек отличающихся от черного цвета в каждом канале изображения на 1. И всего 102 пикселя отличающихся на 2. На 3 единицы нет ни одного пикселя.
Если были бы патологичекси "горячие сенсоры", то были бы пиксели отличающиеся на гораздо большее число. Так битый пиксель привел бы к отклонению на 255.
На ИСО 800 уже появляются кучи пикселей отличающихся уже более чем на 10 единиц в канале.
Тут спрашивали, а почему бы не воспользоваться уровнями шумов приведенными на dpreview. А как интересно Вам те цифры помогут Вам оценить конкретный экземпляр камеры при покупке?
Кстати, тут возникло, еще одна идея по поводу применения анализа шумов на дому. Как известно, NeatImage позволяет загружать с сайта профили шумов для каждой модели камеры. Возможно, если потрудится, получится создавать профили шумов самому, причем заточенный под конкретный экземпляр камеры.
Да, а насчет того, что нельзя пользоваться JPEG. Я тут посмотрел, что в некоторых ситуациях, и анализ JPEG дает неплохой результат. Как вы думаете, если в Шопе создать черный лист и на него бросить одну красную точку. При сохранеии в JPEG, и последующем анализе мы увидим эту точку с большим отклонением от среднего (0) в красном канале цвета (а именно 241 вместо 255), и несколько близлежащих точек, незначительно отклоненных среднего. JPEG сжатие размазало нашу точку, но выставив порог где-нибудь более 20, получим всего один аномальный пиксель. Т.е. столько, сколько и есть на самом деле.
см. скрин.: http://spnet.ru/~nasa/red_pixel.JPG
Вот, новая версия:
http://spnet.ru/~nasa/NoiseTester3.rar
Там, где-то есть ошибочка в арифметике (по-моему в синем канале ошибочка и среднее по каналам неверное), позже подправлю, но логику работы демонстрирует. Может, кто-нибудь, что дельного присоветует.
см. скрин.: http://spnet.ru/~nasa/NoiseTester3.JPG
(Прогу до конца затестирую и выложу тоже)
Насчет того, что не может быть нулей. А же выкладывал JPEG скаченный с камеры. Можете посмотреть его в ШОПЕ.
Так вот у него для 8 миллионов пикселей, есть 2909 точек отличающихся от черного цвета в каждом канале изображения на 1. И всего 102 пикселя отличающихся на 2. На 3 единицы нет ни одного пикселя.
Если были бы патологичекси "горячие сенсоры", то были бы пиксели отличающиеся на гораздо большее число. Так битый пиксель привел бы к отклонению на 255.
На ИСО 800 уже появляются кучи пикселей отличающихся уже более чем на 10 единиц в канале.
Тут спрашивали, а почему бы не воспользоваться уровнями шумов приведенными на dpreview. А как интересно Вам те цифры помогут Вам оценить конкретный экземпляр камеры при покупке?
Кстати, тут возникло, еще одна идея по поводу применения анализа шумов на дому. Как известно, NeatImage позволяет загружать с сайта профили шумов для каждой модели камеры. Возможно, если потрудится, получится создавать профили шумов самому, причем заточенный под конкретный экземпляр камеры.
Да, а насчет того, что нельзя пользоваться JPEG. Я тут посмотрел, что в некоторых ситуациях, и анализ JPEG дает неплохой результат. Как вы думаете, если в Шопе создать черный лист и на него бросить одну красную точку. При сохранеии в JPEG, и последующем анализе мы увидим эту точку с большим отклонением от среднего (0) в красном канале цвета (а именно 241 вместо 255), и несколько близлежащих точек, незначительно отклоненных среднего. JPEG сжатие размазало нашу точку, но выставив порог где-нибудь более 20, получим всего один аномальный пиксель. Т.е. столько, сколько и есть на самом деле.
см. скрин.: http://spnet.ru/~nasa/red_pixel.JPG
Вот, новая версия:
http://spnet.ru/~nasa/NoiseTester3.rar
Там, где-то есть ошибочка в арифметике (по-моему в синем канале ошибочка и среднее по каналам неверное), позже подправлю, но логику работы демонстрирует. Может, кто-нибудь, что дельного присоветует.
Re: Re: Re: Re: Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
да так можно сравнвать разные экземпляры одной модели. но нельзя сравнвать разные модели.
на dpreview шум тоже из пальца высосан.
на dpreview шум тоже из пальца высосан.
Re: Re: Re: Re: Re: Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
Вроде подправил программу.
А почему нельзя сравнивать разные модели?
Хотя бы тест с закрытой крышкой объектива - условия будут одинаковые. Результаты покажут насколько более технологично изготовлена матрица, насколько более однородны сенсоры, насколько сильно влияет уровень ИСО, насколько разнится кол-во горячих пикселей.
Кто-то спрашивал про алгоритм, да вот он:
// открываем jpeg
TJPEGImage *jp= new TJPEGImage();
jp->LoadFromFile(odLoad->FileName);
ImNoise->Picture->Assign(jp);
Bitmap = new Graphics::TBitmap();
Bitmap->Assign(jp);
// определяем размеры
MaxX=Bitmap->Width;
MaxY=Bitmap->Height;
// определяем средний цвет в каждом канале
for(int x=1; xPixels[x][y] & 0x0000ff);
MedG+=(Bitmap->Canvas->Pixels[x][y] & 0x00ff00)/0xff;
MedB+=(Bitmap->Canvas->Pixels[x][y] & 0xff0000)/0xffff;
}
}
MedR=MedR/(MaxX*MaxY);
MedG=MedG/(MaxX*MaxY);
MedB=MedB/(MaxX*MaxY);
int P = StrToInt(edP->Text); // пороговый уровень
// считаем пиксели отклонения от среднего у которых превышает порог для каждого канала
for(int x=0; xPixels[x][y]& 0x0000ff) - MedR);
if (Otkl >= P) {OtklR += Otkl; NR++; }
Otkl = abs((Bitmap->Canvas->Pixels[x][y]& 0x00ff00)/0xff - MedG);
if (Otkl >= P) {OtklG += Otkl; NG++; }
Otkl = abs((Bitmap->Canvas->Pixels[x][y]& 0xff0000)/0xffff - MedB);
if (Otkl >= P) {OtklB += Otkl; NB++; }
}
}
//выводим результат
if (NR > 0)
lbOtklR->Caption=FloatToStrF((float)OtklR/(NR),ffFixed,8,3);
else
lbOtklR->Caption=0;
if (NG > 0)
lbOtklG->Caption=FloatToStrF((float)OtklG/(NG),ffFixed,8,3);
else
lbOtklG->Caption=0;
if (NB > 0)
lbOtklB->Caption=FloatToStrF((float)OtklB/(NB),ffFixed,8,3);
else
lbOtklB->Caption=0;
if (NR+NG+NB > 0)
lbOtklS->Caption=FloatToStrF((float)(OtklR+OtklG+OtklB)/(NR+NG+NB),ffFixed,8,3);
else
lbOtklS->Caption=0;
lbNR->Caption=NR;
lbNG->Caption=NG;
lbNB->Caption=NB;
lbNS->Caption=NR+NG+NB;
А почему нельзя сравнивать разные модели?
Хотя бы тест с закрытой крышкой объектива - условия будут одинаковые. Результаты покажут насколько более технологично изготовлена матрица, насколько более однородны сенсоры, насколько сильно влияет уровень ИСО, насколько разнится кол-во горячих пикселей.
Кто-то спрашивал про алгоритм, да вот он:
// открываем jpeg
TJPEGImage *jp= new TJPEGImage();
jp->LoadFromFile(odLoad->FileName);
ImNoise->Picture->Assign(jp);
Bitmap = new Graphics::TBitmap();
Bitmap->Assign(jp);
// определяем размеры
MaxX=Bitmap->Width;
MaxY=Bitmap->Height;
// определяем средний цвет в каждом канале
for(int x=1; xPixels[x][y] & 0x0000ff);
MedG+=(Bitmap->Canvas->Pixels[x][y] & 0x00ff00)/0xff;
MedB+=(Bitmap->Canvas->Pixels[x][y] & 0xff0000)/0xffff;
}
}
MedR=MedR/(MaxX*MaxY);
MedG=MedG/(MaxX*MaxY);
MedB=MedB/(MaxX*MaxY);
int P = StrToInt(edP->Text); // пороговый уровень
// считаем пиксели отклонения от среднего у которых превышает порог для каждого канала
for(int x=0; xPixels[x][y]& 0x0000ff) - MedR);
if (Otkl >= P) {OtklR += Otkl; NR++; }
Otkl = abs((Bitmap->Canvas->Pixels[x][y]& 0x00ff00)/0xff - MedG);
if (Otkl >= P) {OtklG += Otkl; NG++; }
Otkl = abs((Bitmap->Canvas->Pixels[x][y]& 0xff0000)/0xffff - MedB);
if (Otkl >= P) {OtklB += Otkl; NB++; }
}
}
//выводим результат
if (NR > 0)
lbOtklR->Caption=FloatToStrF((float)OtklR/(NR),ffFixed,8,3);
else
lbOtklR->Caption=0;
if (NG > 0)
lbOtklG->Caption=FloatToStrF((float)OtklG/(NG),ffFixed,8,3);
else
lbOtklG->Caption=0;
if (NB > 0)
lbOtklB->Caption=FloatToStrF((float)OtklB/(NB),ffFixed,8,3);
else
lbOtklB->Caption=0;
if (NR+NG+NB > 0)
lbOtklS->Caption=FloatToStrF((float)(OtklR+OtklG+OtklB)/(NR+NG+NB),ffFixed,8,3);
else
lbOtklS->Caption=0;
lbNR->Caption=NR;
lbNG->Caption=NG;
lbNB->Caption=NB;
lbNS->Caption=NR+NG+NB;
Re: Re: Re: Re: Re: Re: Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
Всё-таки совсем не понятно, какую полезную информацию Вы хотите получить из этих тестов? Вы хотите считать, что лучшим будет тот аппарат, для которого число аномальных пикселей, выдаваемых Вашей программой, будет меньше? :D :D :D
В любом аппарате при преобразовании в jpeg действует внутрикамерный алгоритм шумоподавления (и шарпа) и в подавляющем большинстве камер он не отключается. Поэтому на реальных снимках вы можете увидеть большее мыло и полное отсутствие мелких деталей (которые, тем не менее, позволяют разрешить оптика и матрица), но зато шума будет мало :!:
Сравнивать jpeg-и имеет смысл только на реальных снимках и только субъективно.
Как тут правильно заметили, некий смысл в использовании программных методов есть только при сравнении аппаратов одной модели, в которых алгоритмы преобразования в jpeg одинаковые :!:
В любом аппарате при преобразовании в jpeg действует внутрикамерный алгоритм шумоподавления (и шарпа) и в подавляющем большинстве камер он не отключается. Поэтому на реальных снимках вы можете увидеть большее мыло и полное отсутствие мелких деталей (которые, тем не менее, позволяют разрешить оптика и матрица), но зато шума будет мало :!:
Сравнивать jpeg-и имеет смысл только на реальных снимках и только субъективно.
Как тут правильно заметили, некий смысл в использовании программных методов есть только при сравнении аппаратов одной модели, в которых алгоритмы преобразования в jpeg одинаковые :!:
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
А, что думают гуру от фотографии по поводу создания программы шумоподавления "заточенной" под конкретный экземпляр матрицы.
Для начала можно провести тест. Пока не пробовал, но думаю, что должно быть так. Если шумы обусловлены различием в чувствительности сенсоров, то сфотографировав некий однородный предмет, для каждого пикселя находим отклонение от среднего в каждом канале и запоминаем для каждого пикселя поправочный коэффициент. Т.е. если все пиксели домножить на эти коэффициенты, то получим идеально однородный рисунок.
И сдается мне, что если уже другой кадр (сделанный при том же ИСО) домножить на эти коэффициенты, то шумы должны уменьшится. (Да JPEG здесь будет мешать лучше переделать в идеале на RAW, но хотя бы на TIFF).
Еще одна проблемка в нелинейности зависимости шумового рисунка от освещенности предмета. Т.е. если мы сфотографируем белый лист, построим коэффициенты, при повторном фотографировании белого листа при той же освещенности коэффициенты должны помоч, а при фотографировании черного листа будут бесполезны.
Выход видится в том, чтобы построить коэффициенты для нескольких степеней освещенности поверхности от ярко белой до черной. И при анализе пикселя с реальной фотографии смотреть в какой диапазон освещенности попадает пиксель и домножать его уровни в каждом канале на коэффициенты из соответствующей таблицы. Сдается мне должно помочь если не совсем задавить, но уменьшить шум, причем без потери резкости.
Кстати, помоему, нечто подобное фотоаппарат делает сам. Например, в инструкции к Minolte, написано, что иногда при выключении камеры, она выключается не сразу, а на экране появляется надпись "калибровка матрицы" и она потом сама выключится спустя некоторе время. Но камера наверняка может откалиброваться только по черному листу (аналог фотографирования с закрытой крышкой). А мы сможем создать калибровочные таблицы для любых уровней освещенности.
В принципе, провести эксперимент несложно, если не заленюсь сделаю, потом напишу.
Для начала можно провести тест. Пока не пробовал, но думаю, что должно быть так. Если шумы обусловлены различием в чувствительности сенсоров, то сфотографировав некий однородный предмет, для каждого пикселя находим отклонение от среднего в каждом канале и запоминаем для каждого пикселя поправочный коэффициент. Т.е. если все пиксели домножить на эти коэффициенты, то получим идеально однородный рисунок.
И сдается мне, что если уже другой кадр (сделанный при том же ИСО) домножить на эти коэффициенты, то шумы должны уменьшится. (Да JPEG здесь будет мешать лучше переделать в идеале на RAW, но хотя бы на TIFF).
Еще одна проблемка в нелинейности зависимости шумового рисунка от освещенности предмета. Т.е. если мы сфотографируем белый лист, построим коэффициенты, при повторном фотографировании белого листа при той же освещенности коэффициенты должны помоч, а при фотографировании черного листа будут бесполезны.
Выход видится в том, чтобы построить коэффициенты для нескольких степеней освещенности поверхности от ярко белой до черной. И при анализе пикселя с реальной фотографии смотреть в какой диапазон освещенности попадает пиксель и домножать его уровни в каждом канале на коэффициенты из соответствующей таблицы. Сдается мне должно помочь если не совсем задавить, но уменьшить шум, причем без потери резкости.
Кстати, помоему, нечто подобное фотоаппарат делает сам. Например, в инструкции к Minolte, написано, что иногда при выключении камеры, она выключается не сразу, а на экране появляется надпись "калибровка матрицы" и она потом сама выключится спустя некоторе время. Но камера наверняка может откалиброваться только по черному листу (аналог фотографирования с закрытой крышкой). А мы сможем создать калибровочные таблицы для любых уровней освещенности.
В принципе, провести эксперимент несложно, если не заленюсь сделаю, потом напишу.
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Тестируем уровень шумов матрицы своих фотоаппаратов
аффтар это байан.. в любой форум по астрономии 
по жизни матрицы калибруют на утечку и flat-field correction (сюда же кстати пыль на матрице и виньетирование обьектива)
Y=(X-b-a*t)*c
t=выдержка
кроме того неравномерность чувствительности пикселей как правило пренебрежимо мала по сравнению с остальной хренью
по жизни матрицы калибруют на утечку и flat-field correction (сюда же кстати пыль на матрице и виньетирование обьектива)
Y=(X-b-a*t)*c
t=выдержка
кроме того неравномерность чувствительности пикселей как правило пренебрежимо мала по сравнению с остальной хренью
