Хочу попросить помощи. Мне нужна программа, которая сможет проанализировать изображения типа тех, что я прикрепил. Вообще, нужно сравнить фотографии и сказать, где свечение наиболее плотное, а где больше разрывов в этом ореоле.
Может быть, кто-нибудь может посоветовать программу типа этой, или подсказать, можно ли её написать на C++? Я сам знаком только с Паскалем, а программа такого рода нужна для научной работы. Не играет роли, напишу ли я её сам или где найду, поэтом хочу спросить у вас помощи. Уповать на то, что кто-нибудь по доброте душевной возьмет да и напишет её, наверное, не стоит? Я так понимаю, программу, которая работает с изображением, написать не так-то просто? В любом случае, жду ответов!
Нужна программа, анализирующая изображение
Модераторы: Naeel Maqsudov, C_O_D_E
- Вложения
-
- IMG_2294.jpg (30.07 КБ) 94 просмотра
-
- IMG_2293.jpg (26.48 КБ) 93 просмотра
-
- IMG_2291.jpg (29.99 КБ) 92 просмотра
-
- IMG_2288.jpg (26.51 КБ) 94 просмотра
Я думаю, имеет смысл почитать про графические редакторы. По крайней мере, в том же Фотошопе инструмент "Волшебная палочка" работает именно на принципе сравнения цвета соседних пикселей - укладывается ли их разность в заданный диапазон. Если не укладывается - значит, пошел участок изображения, закрашенный другим цветом, в вашем случае - разрыв.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
А в самом деле, попробуйте воспользоватья просто фотошопом.
Идея следующая. У упомянутого инструмента есть характеристика Tolerance (T), выраженная числом.
Для замера плотности свечения ставим T= например 10, и кликаем в самую яркую точку свечения (Ее тоже в фотошопе не трудно объективно найти). Затем понемногу увеличиваем T и находим минимальное значение, при котором выделяется весь ореол.
Чем меньше это Т, тем меньне разрывов.
Полученная величина не является абсолютным показателем, но тем не менее хорошо подходит для сравнения фотографий сделанных в одинаковых условиях.
Идея следующая. У упомянутого инструмента есть характеристика Tolerance (T), выраженная числом.
Для замера плотности свечения ставим T= например 10, и кликаем в самую яркую точку свечения (Ее тоже в фотошопе не трудно объективно найти). Затем понемногу увеличиваем T и находим минимальное значение, при котором выделяется весь ореол.
Чем меньше это Т, тем меньне разрывов.
Полученная величина не является абсолютным показателем, но тем не менее хорошо подходит для сравнения фотографий сделанных в одинаковых условиях.
Сказанное выше - вариант, НО дело в том, что картинок таких явно не одна штука, а возможно тысячи. И лично я бы порекомендовал использовать свой собственный фильтр. Судя по своему опыту создания подобных фильтров могу сказать что дело в 2-3 днях работы, только вот сейчас для меня приоритетны программы, за которые платят. Если не к спеху, то когда освобожусь могу помочь с кодом.
It's a long way to the top if you wanna rock'n'roll
Спасибо за советы, попробовал вариант с Фотошопом. Не то, чтобы совсем хорошо, но все равно спасибо, сейчас пытаюсь освоить этот способ
На самом деле, фотографий не сотни и не тысячи - десяток, может два. Конечно, и с таким количеством в ручную не очень удобно все-таки, но можно.
2system architect, спасибо, конечно. Помощь была бы очень кстати. Только вот, как я сказал, сам знаю только паскаль, поэтому мне сложно представить, о каких фильтрах вы говорите.
На самом деле, фотографий не сотни и не тысячи - десяток, может два. Конечно, и с таким количеством в ручную не очень удобно все-таки, но можно.
2system architect, спасибо, конечно. Помощь была бы очень кстати. Только вот, как я сказал, сам знаю только паскаль, поэтому мне сложно представить, о каких фильтрах вы говорите.
-
- Сообщения: 2
- Зарегистрирован: 05 дек 2008, 00:26
Я извиняюсь что пишу в данном топике Но почему то у меня нет права создавать темы Мне нужна помошь такого плана У меня есть программа на паскале мне нужно просто разбить ее на процедуры если кто то может мне помоч буду очень благодарен
Program HomeWork;
type
Polinom=^Monom;
Monom=record
degree, coof: integer;
Next:Polinom;
end;
var
First:Polinom;
Info: Polinom;
firsttry, maxdg, mindg, coofmaxdg, checkdg, dg, co:integer;
begin
First:=nil; {Snachala First ne ukazyvaet ni na chto}
repeat
write('Please, enter degree and coof (0 0 for exit):');
readln(dg, co);
if (dg=0) and (co=0) then break; {Prekrashaem vvod, esli vvedeny nuli}
if First=NIL then begin {esli First=NIL, to sozdaem perviy element}
new(Info); {Sozdali element s adresom v Info}
First:=Info; {Zapomnim ego adres}
end else begin {Esli element ne perviy}
New(Info^.Next); {to sozdaem element na osnove pred.}
Info:=Info^.Next; {tekushiy element - tolko chto sozdanniy}
end;
Info^.degree:=dg; {Zadaem znachenie}
Info^.coof:=co;
until false; {Zicl beskonechen. Preryvaetsya tolko pri vvedenii nulei}
Info^.Next:=NIL; {posledniy element nulevoi}
Info:=First; {Ukazyvaem na perviy element posledovatelnosti}
Mindg:= 32767;
While info<>NIL do begin {Ishem minimalnii koefficient}
if (info^.degree <mindg) then begin
mindg := info^.degree;
end;
Info:=Info^.Next;
end;
Info := First; {Vozvrashaemsya k nachalu spiska}
checkdg:= 32767;
Firsttry:=1;
repeat
maxdg:= -32768;
Coofmaxdg:= 0;
Info:= First;
While info<>NIL do begin {Ishem maximalnii koefficient}
if firsttry = 0 then begin
if (info^.degree > maxdg) and (info^.degree < checkdg) then begin
maxdg := info^.degree;
end;
end else begin
if (info^.degree > maxdg) then begin
maxdg := info^.degree;
end;
end;
Info:=Info^.Next;
end;
Info := First; {Vozvrashaemsya k nachalu spiska}
While info<>NIL do begin {summirue cooficienty}
if info^.degree = maxdg then begin
coofmaxdg := coofmaxdg + info^.coof;
end;
Info:=Info^.Next;
end;
If (coofmaxdg <> 0) and (maxdg <>0) then begin
if (coofmaxdg>0) then begin
write('+');
end;
Write(coofmaxdg, 'x^', maxdg, ' ');
end;
firsttry:= 0;
If maxdg = mindg then break;
checkdg := maxdg;
Until false;
readln;
end.
Program HomeWork;
type
Polinom=^Monom;
Monom=record
degree, coof: integer;
Next:Polinom;
end;
var
First:Polinom;
Info: Polinom;
firsttry, maxdg, mindg, coofmaxdg, checkdg, dg, co:integer;
begin
First:=nil; {Snachala First ne ukazyvaet ni na chto}
repeat
write('Please, enter degree and coof (0 0 for exit):');
readln(dg, co);
if (dg=0) and (co=0) then break; {Prekrashaem vvod, esli vvedeny nuli}
if First=NIL then begin {esli First=NIL, to sozdaem perviy element}
new(Info); {Sozdali element s adresom v Info}
First:=Info; {Zapomnim ego adres}
end else begin {Esli element ne perviy}
New(Info^.Next); {to sozdaem element na osnove pred.}
Info:=Info^.Next; {tekushiy element - tolko chto sozdanniy}
end;
Info^.degree:=dg; {Zadaem znachenie}
Info^.coof:=co;
until false; {Zicl beskonechen. Preryvaetsya tolko pri vvedenii nulei}
Info^.Next:=NIL; {posledniy element nulevoi}
Info:=First; {Ukazyvaem na perviy element posledovatelnosti}
Mindg:= 32767;
While info<>NIL do begin {Ishem minimalnii koefficient}
if (info^.degree <mindg) then begin
mindg := info^.degree;
end;
Info:=Info^.Next;
end;
Info := First; {Vozvrashaemsya k nachalu spiska}
checkdg:= 32767;
Firsttry:=1;
repeat
maxdg:= -32768;
Coofmaxdg:= 0;
Info:= First;
While info<>NIL do begin {Ishem maximalnii koefficient}
if firsttry = 0 then begin
if (info^.degree > maxdg) and (info^.degree < checkdg) then begin
maxdg := info^.degree;
end;
end else begin
if (info^.degree > maxdg) then begin
maxdg := info^.degree;
end;
end;
Info:=Info^.Next;
end;
Info := First; {Vozvrashaemsya k nachalu spiska}
While info<>NIL do begin {summirue cooficienty}
if info^.degree = maxdg then begin
coofmaxdg := coofmaxdg + info^.coof;
end;
Info:=Info^.Next;
end;
If (coofmaxdg <> 0) and (maxdg <>0) then begin
if (coofmaxdg>0) then begin
write('+');
end;
Write(coofmaxdg, 'x^', maxdg, ' ');
end;
firsttry:= 0;
If maxdg = mindg then break;
checkdg := maxdg;
Until false;
readln;
end.