2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Помогите понять как делать и написать формулу
Сообщение17.10.2013, 12:47 
Может ошибся веткой, заранее извиняюсь (за информативное название топика тоже).

Пытаюсь установить есть ли на ч/б фото шум, стандартными методами надо иметь камеру и сравнить с идеальной картинкой, или иметь много одинаковых фото и сравнить их между собой, или визуально выбрать однотонный участок и посмотреть гистограмму распределения яркости.
У меня есть только один конечный снимок, камеры нет, выбирать однородный участок лень :)

Пробую подход: брать разницу между двумя соседними пикселями, и найти среднее арифметическое этой разницы... Наткнулся на статью, где предлагают брать разницу между соседними пикселями (левый и правый), транспонировать матрицу и повторить. Это правильнее так как разница заметна тогда и по горизонтали, и по вертикали. Также в статье зачем-то делят после вычитания на квадратный корень из двух.
Подумал - тоже верно, так как имея матрицу [100, 50; 50, 30] без деления результат будет 0, а с делением -10.3553
Код матлаба для этой операции такой
Код:
H = image;
H = (H(1:n-1,:) - H(2:n,:))'/sqrt(2);
H = (H(1:n-1,:) - H(2:n,:))'/sqrt(2);


Вопрос - почему делим именно на корень из двух? Ведь при многих других значениях знаменателя результат тоже будет отличный от нуля, какие плюсы в корне из 2?

 
 
 
 Posted automatically
Сообщение17.10.2013, 16:38 
Аватара пользователя
 i  Тема перемещена из форума «Математика (общие вопросы)» в форум «Программирование»

 
 
 
 Re: Помогите понять как делать и написать формулу
Сообщение17.10.2013, 18:55 
Аватара пользователя
CheerfulCalf в сообщении #776373 писал(а):
Подумал - тоже верно, так как имея матрицу [100, 50; 50, 30] без деления результат будет 0, а с делением -10.3553

Как вы проверяли? Запустил код без деления +30 с делением +15

А куда в коде усреднение пропало? Да и явно в коде ошибки в циклах.

Тоже не знаю почему на $\sqrt{2}$ делят. Толи кто-то ошибся и должно быть деления на 2 для сохранения длины масштаба. Толи хотели посчитать производную по диагонали, тогда надо делить только один раз на $\sqrt{2}$.

 
 
 
 Re: Помогите понять как делать и написать формулу
Сообщение17.10.2013, 19:12 
Pavia в сообщении #776548 писал(а):
Как вы проверяли?
Ерунду сказал. Отнял дважды 50 из первой матрицы.
Pavia в сообщении #776548 писал(а):
А куда в коде усреднение пропало? Да и явно в коде ошибки в циклах. ... Тоже не знаю почему на $\sqrt{2}$ делят. Толи кто-то ошибся ...
Я усреднение просто не выложил, так как с $\sqrt{2}$ думал разобраться сначала... Вот весь код и он работает. Только не понятно что именно он делает :(
Код:
%% In practice, the noise level sigma is unknown.
%  For additive Gaussian noise, a good estimator is given by the median
%  of the wavelet coefficients at the finer scale. An even simple
%  estimator is given by the normalized derivate along X or Y direction.

%% Load a clean image.
n = 256;
M0 = rescale(load_image('boat', n));

%% Generate a noisy image.
sigma = 0.06;
M = M0 + randn(n,n)*sigma;

%% First we extract the high frequency residual.
H = M;
H = (H(1:n-1,:) - H(2:n,:))'/sqrt(2);
H = (H(1:n-1,:) - H(2:n,:))'/sqrt(2);

%% Display.
clf;
imageplot(clamp(M), 'Noisy image', 1,2,1);
imageplot(H, 'Derivative image', 1,2,2);

%% Noise estimator.
sigma_est = mad(H(:),1)/0.6745;
disp( strcat(['Estimated noise level=' num2str(sigma_est), ', true=' num2str(sigma)]) );

 
 
 
 Re: Помогите понять как делать и написать формулу
Сообщение17.10.2013, 20:35 
Аватара пользователя
CheerfulCalf
http://www.mathworks.com/matlabcentral/ ... index.html

:facepalm: Это просто масштабный коэффициент, подобранный эмпирически. Хотя практически хорошо известен и он несколько больше. В данном случае его просто разложили на 3 равных множителя и раскидали по разным пространствам.

В статье упор делается на изменения размерности. Можешь поискать или попробовать провести исследования как влияет размер матрицы на уровень максимального выброса ошибки. Хотя практически скорее всего будут влиять другие факторы.

 
 
 
 Re: Помогите понять как делать и написать формулу
Сообщение18.10.2013, 00:24 
To есть от того, что я уберу эти коэффициенты (деление на корень из 2) - ничего не изменится?

 
 
 
 Re: Помогите понять как делать и написать формулу
Сообщение18.10.2013, 05:28 
Аватара пользователя
CheerfulCalf в сообщении #776651 писал(а):
To есть от того, что я уберу эти коэффициенты (деление на корень из 2) - ничего не изменится?

Его проще убрать и вывести по нормальному. Тем более нет никакого смысла разделять его на 3 множителя.
Можно ли его выкинуть совсем? Так я же написал исследуй. Выкинуть можно разница там небольшая.

 
 
 
 Re: Помогите понять как делать и написать формулу
Сообщение18.10.2013, 14:11 
Pavia в сообщении #776666 писал(а):
Так я же написал исследуй. Выкинуть можно разница там небольшая.

У меня весь смысл заключается в оценке зашумленности фото. Я еще до форума пробовал выкинуть, и без него по результату можно классифицировать шум/не шум и даже какой это мог бы быть шум. Потому я и полном недоумении в каких случаях результат без корня будет отличаться от результатa с ним..

 
 
 
 Re: Помогите понять как делать и написать формулу
Сообщение18.10.2013, 17:15 
Аватара пользователя
CheerfulCalf в сообщении #776806 писал(а):
ум. Потому я и полном недоумении в каких случаях результат без корня будет отличаться от результатa с ним..

В статье допущен ряд логических ошибок. Поэтому коэффициент применять нельзя нигде и некогда.
Как ты заметил он не влияет на результат.
Вопрос когда он будет влиять. Ну это трудно ответить зависит от того как и что считаешь и что измеряешь. Но для большинства задач он влиять не будет.

 
 
 
 Re: Помогите понять как делать и написать формулу
Сообщение18.10.2013, 17:29 
Pavia в сообщении #776895 писал(а):
В статье допущен ряд логических ошибок.
A можно меня носом в них? Для более глубокого осмысления...

 
 
 
 Re: Помогите понять как делать и написать формулу
Сообщение19.10.2013, 10:06 
Аватара пользователя
Честно мне лень. Пойдём по порядку. В статье не приводятся выкладки, а сразу результаты.
1) Максимум шума зависит от числа элементов при одинаковой модели шума в статье это не учитывают. Более того они говорят о размерности, а размерность только следствие. У них масштаб изображения равен 256 на 256 и элемент 0..255. Откуда видимо всё и потекло.
2) Как-то у них размерность дробная что ли по графикам посмотри. Т.е масштабировать надо было не размерность, а величину порога ошибки.
3)Эмпирическая формула. А они не всегда бывают правильными.
4) В третьих размерность неправильно посчитана. Они решили что это 3 хотя на самом деле 2, так как порог выбирается от величины коэфициента.

 
 
 [ Сообщений: 11 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group