Изменить диапазон чисел матрицы

Форум, посвященный общим вопросам, связанным с MATLAB

Модератор: Admin

tur91
Пользователь
Сообщения: 142
Зарегистрирован: Пн май 05, 2008 4:22 pm

Сообщение tur91 » Чт окт 17, 2013 10:41 am

Вопрос в продолжение (вдруг кто-нибудь ответит)
На верхнем рисунке картинка исходной матрицы (записан в R.mat http://zalil.ru/34780219)
На след рисунке красным цветом гистограмма hR этой матрицы R
n = 0:1023; [hR x] = hist(R( : ), n);

На след рис изображен белым цветом массив коэффициентов (записан в coef.mat http://zalil.ru/34780226)
Затем умножаю матрицу на коэф-ты R1 = R.*coef(R+1); и получаю новую матрицу R1. Ее гистограмма hR1 изображена на рис ниже черным цветом [hR1 x1] = hist(R1( : ), n);
На самом нижнем рис показана матрица R1.
Изображение

Вопрос: почему гистограмма матрицы R1 такая разорванная (второй снизу рис) постоянные падения до нуля, ведь массив коэффициентов плавный, без разрывов?

Понял я в чем дело, ошибки тут нет. Если умножить массив чисел 0:1023 на мои коэф-ты, то в полученном новом массиве не будут появляться все числа от 0 до 1023. Так что вопрос снимаю.

Сергей aka Грифон
Пользователь
Сообщения: 857
Зарегистрирован: Вс ноя 22, 2009 4:24 pm

Сообщение Сергей aka Грифон » Чт окт 17, 2013 1:22 pm

А можно услышать задачу целиком? и на каких стадиях решения появляются проблемы?

tur91
Пользователь
Сообщения: 142
Зарегистрирован: Пн май 05, 2008 4:22 pm

Сообщение tur91 » Чт окт 17, 2013 4:53 pm

Есть видеокамера с полу-разобранной электроникой, которая выдает только 10-битные числа матрицы. Камера фотографирует одно и то же место на конвейере. Освещение ужасное, но постоянное. В этих условиях нужно получить наилучшее изображение, годное для последующей обработки.
Пока сделана дебаризация и начат баланс белого. Но для некоторого рода таблеток получаются негодные фотографии. На рис ниже верхний снимок (белых таблеток) - исходные данные, след ниже после ББ. Но если ту же операцию применить к фото зеленых таблеток (третий сверху рис - исходные данные и след ниже после ББ), то получается совсем не то, что надо, что видит глаз.
Изображение

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

Вот гистограммы соотв рисунков выше
Изображение

Сергей aka Грифон
Пользователь
Сообщения: 857
Зарегистрирован: Вс ноя 22, 2009 4:24 pm

Сообщение Сергей aka Грифон » Чт окт 17, 2013 8:36 pm

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

Если вместо гауссианы Вы увидите полноценную дифракционную картину, всё гораздо сложнее, но тоже в принципе решаемо.

Для сведения каналов можно банально найти пики (findpeaks) на гистограмме для зелёного, а красную и синюю гистограммы перетянуть так, чтобы пики всех трёх совпали. Вы выиграете в собираемом собираемом свете, но скорее всего получите размытые края. Также при сведении пиков полезно иметь кривую чувствительности камеры от длины света, тогда гистограммы можно будет подогнать по высоте.

U235
Пользователь
Сообщения: 814
Зарегистрирован: Пт июл 01, 2005 10:13 am

Сообщение U235 » Чт окт 17, 2013 9:37 pm

tur91 писал(а): Камера фотографирует одно и то же место на конвейере. Освещение ужасное, но постоянное.

Советую начать с освещения. Наиболее хорошим источником света является лампа накаливания, тип А (непрерывный спектр). Самым плохим - ртутные люменесцентные лампы, тип F (линейчато-непрерывный). На ртутных лампах могут появлятся различные артефакты цвета (напр. александритовый эффект в неодимовых стеклах). Еще возможна люменисценция материала самих таблеток при освещении ртутной лампой.

tur91
Пользователь
Сообщения: 142
Зарегистрирован: Пн май 05, 2008 4:22 pm

Сообщение tur91 » Пн окт 21, 2013 2:02 pm

Сергей aka Грифон, U235, спасибо

Сергей aka Грифон, коррекцией поля освещения наметил заняться после ББ, но с ним застрял как ни странно все по той же причине: как умножить соответствующие числа матрицы на соответствующие коэф-ты когда размерность массива коэф-тов произвольна.
Т.е. дано

1) матрица А скажем m на n, где числа от 0 до 1023
2) диапазон чисел например от lt = 500 до rt = 800
3) для этого диапазона построен массив чисел coef длиной N = 800 - 500 = 300

надо все числа матрицы А равные 500 умножить на coef(1), числа матрицы 501 умножить на coef(2) и т д.

Предыдущие примеры с unique и ismember были для случая совпадения размерности диапазона чисел матрицы А и массива коэф-тов coef
А в случае несовпадения размерности всегда получаю ошибку о несовпадении размерности при умножении матрицы на массив коэф-тов.

U235, тип А взять не получится, т.к. эти лампы быстро перегорают. Неясно также должна ли лампа мигать с частотой кадров (~20Гц) или светить постоянно.

Сергей aka Грифон
Пользователь
Сообщения: 857
Зарегистрирован: Вс ноя 22, 2009 4:24 pm

Сообщение Сергей aka Грифон » Пн окт 21, 2013 10:58 pm

по поводу перетягивания:
лучше сначала скорректировать освещение для каждого канала отдельно. Если хотите перешкалировать, попробуйте как-то так:

Код: Выделить всё

rangeA=A(idx1:idx2);
minR = min(rangeA(:));
maxR = max(rangeA(:));
rangeB = mat2gray(rangeA, [ minR maxR ]).*maxR + minR;


По поводу освещения могу посоветовать диодную лампу, в идеале - через тонкую водяную линзу для равномерности. Горение постоянное (сложно синхронизовать), диоды дают приемлемую долговечность и яркость.