Спектр матрицы и длина волны

Всего 62 сообщ. | Показаны 21 - 40
Re[tur91]:
Цитата:

от:tur91
L4m3r,
Проблема в том, что таблетки идут плотно соприкасаясь. Одна таблетка может закрывать частично нижнюю кромку другой. Могут получаться области сплошь залитые одним цветом. Если бы таблетки шли одна за другой раздельно, то тогда можно было бы каждый раз пересчитывать геометрию контура, но и в этом случае понадобились бы какие то специальные опыты по выявлению реальных характеристик пересчета. Тот расчет, который я привел для b предельно прост. В реальности было бы все сложнее, т.е. на этот расчет нельзя было бы опираться. Желательно также быть свободным от высоты таблетки, т.е. какие бы новые таблетки не запустили по конвейеру система разделяет их и определяет контур каждой. Короче эта идея геометрического пересчета контура что то мне не по душе, хотя я ее и не отбрасываю совершенно.
Может быть разделить линию на две по 40 мм каждая или на три даже. Тогда наверное можно найти подходящий телецентрический объектив за приемлемую цену?

Выше я привел график b vs H, а расчет не привел ввиду его простоты, так как линзу взял точечную. А если учесть диаметр входного зрачка и может быть простейшую конструкцию телецентрического объектива, то какой будет расчет и график b vs D для конкретной высоты объектива над конвейером H и высоты таблетки h? Вот понимания этого у меня нет. Сколько я ни читаю как о стенку горох. Можно наверное телецентричность задать простой оптической схемой из которой станет ясен этот механизм и ход лучей в нем.
График b vs D нужен чтобы прикинуть размеры всей установки, (там не мало параметров) а также определить какой объектив нужен. В конце надо все оптимизировать. Короче нужен хоть какой то оценочный расчет. Он помог бы сдвинуть дело с мертвой точки.

Может быть есть промежуточный вариант, т.е. объектив достаточно высока над конвейером и он не совсем телецентрический, может быть полу-телецентрический?

Подробнее

С imagej знакомы? Возможно пригодится для предварительной прикидки.
http://www.imagej.ru/osnovnaya-informatsiya-o-programme-imagej/osobennosti-imagej.html
Re[tur91]:
Я получил небольшую установку, правда из другого проекта где не было нужды в высоком качестве изображения.

Фото таблеток этой установкой

Вот гистограммы первого фото установкой

Это голая установка, т.е. ничего там нет кроме матрицы и объектива, ну еще простую дебайеризацию сделал, это все. Ни баланса белого ни иной коррекции нет. Видимо это не поддается коррекции. Уровней до 30 вообще нет, это шум. Выдержка порядка 0.3 милисек. По краям все пересвечено. В чем тут дело? Электроника? там 12 бит у камеры, а в файле 10 бит (изображение на снимке 8 бит конечно)

А это для сравнения то же самое только моим старым олимпусом урезано до 25%
Re[tur91]:
задрано до чёртиков усиление (типа исо ффотиках)
Re[tur91]:
Спасибо всем за помощь, особенно Вам, L4m3r. Я возвращаюсь к этому проекту. Старая установка так и не заработала. Сейчас новая установка. Сделал несколько снимков пока она не сломалась.

Делаю фото белого листа и нахожу его гистограмму. Как видно на рис ниже белый лист выглядит зеленым.
Вычисляю баланс белого так:
I - исходное изображение с матрицы
R = I(:,:,1); G = I(:,:,2); B = I(:,:,3);
mR = mean(R(: )); mG = mean(G(: )); mB = mean(B(: ));
avg = (mR + mG + mB)/3;
Kr = avg/mR; Kg = avg/mG; Kb = avg/mB;
newR = Kr.*R;
newG = Kg.*G;
newB = Kb.*B;
K = [Kr Kg Kb]; %[1,230 0,855 0,982]
J(:,:,1) = newR; J(:,:,2) = newG; J(:,:,3) = newB;

Изображение J и его гистограмма ниже на рис.

Тоже самое делаю для черного листа и получаю немного другие коэф-ты K = [1,490 0,780 0,956]
Вот гистограммы до и после баланса белого по тому же алгоритму

Тоже самое делаю для белых таблеток и получаю K = [1,343 0,844 0,933]
Ниже рис для этого случая

Вопрос: какие коэф-ты установить постоянными для установки?
[1,230 0,855 0,982]
[1,490 0,780 0,956]
[1,343 0,844 0,933]
Re[tur91]:

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

если нужен реальный цвет там будут не коэф а умножене на матрицу 3*3.
меряются 3 (заранее извесных) цвета которые надо точно оперделять и составляется матрица 3х3. в прочем если их определять в реальных цветах ненадо а просто отличать друг от друга то тоже матрицу ненадо.

если точный цвет ненужен то можно взять любой коэф +-10% роли неиграет. можно среднее с белого и таблетки
Re[tur91]:
L4m3r, спасибо
- чорные листы не канают.
Это я не понял. Я то думал взять черный чтобы растянуть потом диапазон и все, а он еще для чего то нужен?
- если нужен реальный цвет там будут не коэф а умножене на матрицу 3*3
алгоритм здесь какой? можете ссылку на теорию дать?

Еще один вопрос по выравниванию освещенности.
Делаю его на основе фото белого листа. После ББ вытаскиваю из него яркость или, что то же самое, серый цвет по формуле Y = 0.299.*R + 0.587.*G + 0.114.*B; , а заодно и Cb и Cr. [Y Cb Cr] = rgb_to_ycbcr(I);
Затем делаю медианную фильтрацию Y = medfilt2(Y, [10 10]); чтобы убрать точечные выбросы.
Вот этот Y после медианной фильтрации, его гистограмма и тот же Y в 3д


Затем фильтром гаусса выделяю НЧ составляющую из Y
h = fspecial('gaussian',50,50);
H = imfilter(Y,h,'replicate');
Вот эта Н в трех видах

Дальше считаю среднюю яркость Ym = mean(Y(:)); и новое изображение с выравненной освещенностью W = Ym.*Y./H;
вот оно в трех видах

На сколько я понимаю теперь следует матрицу Н записать в файл и при обработке таблеток яркостную составляющую каждого фрейма делить на эту матрицу и умножать на что? На какой то постоянный коэффициент? Задача состоит также в том чтобы при нахождении контуров таблеток использовать один порог для разных таблеток.
Re[tur91]:
чорные листы неканают потомучто если вычтеш отфонарное значение а не реальное физическое то нарушиш линейность и таблэтка начнёт менять цвет в завис. от растояния до лампы и угла наклона... атак цвэт таблэтки будит постоянным вне завис. от того как она лежыт. к стати реальный уровень можно померить ибез чорного обьекта вообще а линейной регресией с 2х граней любого обьекта повёрнутых разным углом к свету. тупо через эти 2 точки прямая приведёт концом в уровень чорного.

матрица 3*3 нуужна если предстоит сравнивать цвет с фото снятым другим фотиком.. она перещитывает Rgb в тот цветовой профиль в котором дано еталонное фото. теория называется color matrix думать там особо нечего.


правильнее делить на белый лист все 3 канала т.к поцветка или свето пропускание обьектива может быть неравномерно по цвету слехка. Y юзают токо если позарез надо економить память и вычислений.
коэфициенты тогда и не нужны они будут 1 1 1 (если лист хороший хДД)

Re[tur91]:
Цитата:

от:tur91

Вот еще картинка для примера

У некоторых таблеток видна нижняя часть контура что неприемлемо.

Подробнее

Ах вот чем народ на форуме разгоняется!
Господа, не могли бы Вы , в порядке шефской помощи, выслать мне горсточку таких таблэток. А я бы поучаствовал в Вашем диалоге... Лучше розовеньких, да, без контура.
Re[tur91]:
По мне, так ошибка на входе, не тем путем пошли. Хотя если цель бабло на разработке попилить то да, а вообще, эта инженерная задача имеет более простое, экономичное и надежное решение.
Re[tur91]:
Сначала по последнему пункту
[quot]правильнее делить на белый лист все 3 канала т.к поцветка или свето пропускание обьектива может быть неравномерно по цвету слехка. Y юзают токо если позарез надо економить память и вычислений. [/quot]
Вот три варианта алгоритма
function J = variant1(I)
[Y Cb Cr] = rgb_to_ycbcr(I);
Y = medfilt2(Y, [10 10]);
Ym = mean(Y);
h = fspecial('gaussian',50,50);
H = imfilter(Y,h,'replicate');
W = Ym.*Y./H;
J = ycbcr_to_rgb(W, Cb, Cr);
end

function J = variant2(I)
R = I(:,:,1); G = I(:,:,2); B = I(:,:,3);
Y = 0.299.*R + 0.587.*G + 0.114.*B;
Y = medfilt2(Y, [10 10]);
Rm = mean(R);
Gm = mean(G);
Bm = mean(B);
h = fspecial('gaussian',50,50);
H = imfilter(Y,h,'replicate');
newR = Rm.*R./H; newG = Gm.*G./H; newB = Bm.*B./H;
J(:,:,1) = newR; J(:,:,2) = newG; J(:,:,3) = newB;
end

function J = variant3(I)
R = I(:,:,1); G = I(:,:,2); B = I(:,:,3); f = 10;
R = medfilt2(R, [10 10]);
G = medfilt2(G, [10 10]);
B = medfilt2(B, [10 10]);
Rm = mean(R);
Gm = mean(G);
Bm = mean(B);
h = fspecial('gaussian',50,50);
RH = imfilter(R,h,'replicate');
GH = imfilter(G,h,'replicate');
BH = imfilter(B,h,'replicate');
newR = Rm.*R./RH; newG = Gm.*G./GH; newB = Bm.*B./BH;
J(:,:,1) = newR; J(:,:,2) = newG; J(:,:,3) = newB;
end
Первый вариант первоначальный, о котором шла речь, размытость получаем из серого, дальше серый на нее делим, умножаем на среднее серого и собираем в новое изображение из нового серого и Cb и Cr.
Второй вариант также размытость получаем из серого и на нее делим каждую компоненту R G B и умножаем на среднее каждой компоненты.
Третий вариант: для каждой компоненты находим свою размытость.
Вот результат всех трех вариантов сверху вниз 1 2 3.

Так по какому идти: по второму или по третьему? Это можно по гистограммам решить или только из общих теоретических соображений?
Если по третьему, то следует сначала каким то усреднением по белому листу получить три матрицы RH, GH, BH, и каждый фрейм перед нахождением на нем контуров разделять на его R G B, затем делить каждый на соответствующую матрицу RH GH BH и затем из полученных трех новых матриц получить по какому то новому алгоритму "серый" и на нем только искать контуры? Таков алгоритм?
[quot]коэфициенты тогда и не нужны они будут 1 1 1 (если лист хороший хДД)[/quot]
Какие коэф-ты? Rm, Gm, Bm? Извиняюсь что такое хДД? С матлабом идут их книги в ослепительно белых мягких переплетах, они не подойдут? Может просто ватман чтоб не отражал?

Patternman, Вы о каком более простом решении говорили?
Re[tur91]:
Цитата:
от: tur91
Сначала по последнему пункту

Patternman, Вы о каком более простом решении говорили?

Исходная задача сделать так, что бы КАЖДАЯ ТАБЛЕТКА не отличалась от эталонной.

Эталоном является:

1. Хим. состав;
2. Вес;
3. Влажность наверняка;
4. Внешний вид.
4.1. Цвет
4.2 форма

Для контроля ВСЕХ ЭТИХ ПАРАМЕТРОВ, КАМЕРА И КОМПЬЮТЕР НЕ НУЖНЫ. Инженерная голова нужна и здравый смысл. Раньше ТРИЗ продвигали для решения подобных задач, это решается элементарно и с минимумом затрат. При этом можно будет ещё и % отклонения этих параметров задавать на сортировке.

Re[tur91]:
Patternman, мы занимаемся только последним четвертым пунктом, включающим также повреждения поверхности, царапины и целостность контура. А химия и т.д. это не мы. У Вас есть что предложить по этому пункту?
До сих пор я делал так: получал после ББ серый и по нему находил контуры и сравнивал их с эталоном. Порог=уровень обрезания по которому находились контуры оказывался разным для каждого типа таблеток из-за их различной яркости, удаленности уровней поверхности таблеток от бэкграунда. Из-за неравномерности освещения получалось что радиус таблеток зависит от места ее расположения на фрейме. Поэтому неравномерность освещения надо устранить и вероятно ввести коррекцию яркости, сдвигать ее вправо на гистограмме так чтобы (это желательно) порог был один и тот же для разного типа таблеток.
На рис изображена таблетка в 3д (это фото еще со старой установки) (на ее поверхности нанесены пять черных пятен) и порог = примерно 180 (зеленая плоскость)

Контур таблетки это линия пересечения плоскости порога и уровней таблетки.
Re[tur91]:
[quot]чорные листы неканают потомучто если вычтеш отфонарное значение а не реальное физическое то нарушиш линейность и таблэтка начнёт менять цвет в завис. от растояния до лампы и угла наклона... атак цвэт таблэтки будит постоянным вне завис. от того как она лежыт. к стати реальный уровень можно померить ибез чорного обьекта вообще а линейной регресией с 2х граней любого обьекта повёрнутых разным углом к свету. тупо через эти 2 точки прямая приведёт концом в уровень чорного. [/quot]
Увы, ничего не понял. Не могли бы Вы объяснить это подробней.

У меня было такое намерение... для примера вот та же новая установка со старым освещением

На верхней гистограмме видно, что после ББ все данные о поверхности таблеток расположены примерно от 450 до 750. Бэкграунд начинается где то после 200 и до 0. А не растянуть ли всю полезную информацию 450-750 на весь диапазон от 0 до 1023? Зачем? Думаю таким образом удастся 1. зафиксировать один и тот же уровень для любых таблеток и 2. т.о. находить контуры таблеток надежней и 3. анализировать поверхность таблеток на предмет соответствия шаблону и наличия царапин более тонко.
Т.е. бэкграунд в ноль и растягиваем данные о поверхности на весь диапазон.
Надо ли это делать - неясно, но можно попробовать. Наверное это можно делать по-разному.
Попробовал так:
Выбрал на глазок пару точек и получил четыре черные точки (см рис ниже). Построил на трех отрезках между этими точками сплайны - это коэффициенты для коррекции освещенности.

умножил на эти коэф-ты компоненты
newR = R.*coeff(uint16(R+1));
newG = G.*coeff(uint16(G+1));
newB = B.*coeff(uint16(B+1));
J(:,:,1) = newR; J(:,:,2) = newG; J(:,:,3) = newB;
и получил новое изображение на рис ниже

Растянуть т.о. на весь диапазон не получилось. По этой картинке видно, что коррекция освещенности еще не сделана.

Зачем я сфотографировал черный лист? Хотел посмотреть его значения, сравнить с бэкграундом, увидеть и на нем неравномерность освещенности.

МихаилАнтонович, вот картинка из последнего поста. У меня данные правда 10-ти битные и я их перевел в 8-ми битные.
Re[tur91]:
кароче.
cнимается чорный уровень black.
чорный лист неканает потомучто неравномерность материала любого этого листа раз в 100 превосходит полезный сигнал который тут снимается.


снимаеца белый лист X
вычитаеца чорный
размывается картинка листа в RGB.
Flat=blur(X-black)


фотки с таблэтками Y
вычитаеца чорный
делятся покомпонентно на Flat

Y=(Y-black)./Flat


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

дальше можно упростить очернобелить Flat.
не равномерность белого по цвету тоже бывает невсегда но иногда бывает вон в соседней теме ругаюца у когото вылезло.


цвет материала это R/G и B/G а даже не разу близко не CbCr


а обнаружене ставится по заданому отклонению от цвета конвеерной ленты или чего там. естесно оно одинаковое для фсех.

а ну. если тэнь от свэтлой таблэтки свэтлээ чэм чорная таблэтка сама посебе.
то делаеться такая вещ Z=Y./blur(Y). розмер блюра чуть меньше таблэтки.
и вторичное отсечене по этой фигне.

Re[tur91]:
Мысли примерно такие
1. Поработать над оптической схемой. Система конвеерная, с линейной протяжкой, следовательно циллиндрическая оптика будет только приветствоваться в комплекте с идеологией сканирования линейкой фотоприёмников. Не нужно заморачиваться с телецентрическим объективом, всё равно такой не сделаете по ширине конвеера. А с циллиндической оптикой у Вас в любом месте таблетки будут одинаковы в изображении(если они одинаковы физически).
Можно рассматривать даже применение идеи лидара. Это конечно немного сложнее реализовать в железе, зато опознание объектов может упроститься существенно, так как углы сканирования лазером можно применять разные. Ну и спектральная селективность сразу отсечёт все остальные сопутствующие помехи.
2. Так как массовое производство, то возможно на каждый вид таблеток писать по своему откорректированную программую примочку, а не использовать для всех видов таблеток по геометрии и цвету один алгоритм опознания
3. Статистически выяснить какого вида идёт наиболее вероятный брак, в силу особенностей формирования тела таблетки. То есть скол кромки, или обшее уменьшение диаметра, или квалитет гуляет, или цветовой дефект оболочки таблетки. И исходя из этого на максимально часто вречающийся брак затачивать алгоритм обнаружения дефекта.
Re[МихаилАнтонович]:
или не цылиндр а линейку от кэнонского сканера там на каждом диоди линзочка и она фигачит под себя 1:1

а воще канешна. грохот - наше фсё хДДДДД
Re[tur91]:
Цитата:

от:tur91
Patternman, мы занимаемся только последним четвертым пунктом, включающим также повреждения поверхности, царапины и целостность контура. А химия и т.д. это не мы. У Вас есть что предложить по этому пункту?

Подробнее

Ясно, т.е. руководителя проекта у вас нет (человека с системным мышлением) и требования сформулировать никто не может.

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

2. каким образом вы собираетесь контролировать отклонение контуров в вертикальных плоскостях и "осматривать" нижнюю поверхность?

3. Каким образом собираетесь нормировать величину допуска и нормировать % погрешности? Одинаковых то таблеток нет и они все до одной разные.

4. Каким образом планируете отличать эфект изменения площади поверхности от соприкосновения нескольких объектов и дефекты (наплывы, сколы)?

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

Хотя, разумеется, была и альтернатива в виде уставки видеокамер, но, вероятно, никто не хотел крутить пальцем у виска этого "хозяина". Маразм и самодурство живет и процветает.

Ваш "проект" напоминает задание по измерению направления и скрорости ветра. С точки зрения программиста, нужно по радиусу установить 360 направленных датчиков давления, разработать приобрести установить сооветствующее "железо" и написать программу для рассчета, откалибровать и т.д....

А можно тупо поставить флюгер и тахометр с крыльчаткой.
Re[Patternman]:
да посодить туда гастробайтера и фсе дела. а то камеры фсякии..
правдо к концу смены..:cannabis: :cannabis:
Re[tur91]:
L4m3r,

Итак, для простоты предположим что уровень черного ноль, ничего вычитать не надо.
Снимаем белый лист W и выделяем его W_R, W_G, W_B, размываем каждую компоненту и получаем

W_R_blur,
W_G_blur,
W_B_blur.

Нормируем эти матрицы деля каждую на ее максимум. Получаем те же матрицы но в диапазоне от 0 до 1

W_R_blur_norm,
W_G_blur_norm,
W_B_blur_norm.

Эти три последние матрицы запоминаем.
Когда поступает фрейм с таблетками разлагаем его изображение I на I_R, I_G, I_B и делим на соответствующие матрицы и получаем

Flat_R = I_R./W_R_blur_norm;
Flat_G = I_G./W_G_blur_norm;
Flat_B = I_B./W_B_blur_norm;

Выделяем яркость Y = 0.299*Flat_R + 0.587*Flat_G + 0.114*Flat_B;

Именно на этой матрице Y ищем контуры.

До сих пор все верно?

Теперь допустим черный не ноль (у меня среднее значение черного листа получилось 43) - ну и что? Зачем его вычитать? Какой в этом смысл?

МихаилАнтонович и Patternman, отвечу вам чуть позже.
Re[tur91]:
типа того токо делить на максимум не нужно. максимум это случайная величина образующаяся из за неравномерности.

а в диапозоне от 0 до 1 должен получится как раз результат по которому искать. т.е 0 это физический чорный, 1 это белый лист на который поделили.

УРОВЕН ЧОРНОГО ДЛЯ ТОГО, ЧТО ИНАЧЕ ЦВЕТ ТАБЛЭТКИ, КОТОРАЯ ЛЕЖАЛА БЛИЖЕ К ЛАМПЕ, И КОТОРАЯ ДАЛЬШЕ, ПОЛУЧИТЬСЯ В ИТОГИ РАЗНЫМ


да и если искать по чорнобелой картинке. с таким У фиолэтовая таблэтка станет невидимой)) эти коэфф.Y для глаза они дают жолто-зелёный спектр.
надо братьтили просто R+G+B или среднее по всем используемым таблэткам.
Вы не авторизованы

Пожалуйста, авторизуйтесь, чтоб иметь доступ к полному функционалу сайта

Обратная связь

Здесь вы можете оставить свои контактные данные, чтобы мы могли связаться с вами.