![]() |
Скажу так, мне просто необходимо это сделать. Не важно что и как, но чтобы код работал на шарпе. Есть винАпи функции? Какие?
Ладно, отключение карты уже не так важно, пусть немного коряво так, но через утилиту от микрософта работает. Вся проблема в обновлении айпишника, причем не просто в обновлении, а именно аналоге конпки исправить в состоянии сетевого подключения. Любой способ, хотя бы наведите на путь истинный, скока не искал н емогу найти, гугл на меня в обиде) |
помогите написать проги
Скрытый текст: Скрытый текст: Скрытый текст: |
Th0R(D0)NaR,
совсем лень думать? примитивные же проги. учебный год похоже начался. |
Есть задание: нужно определить площадь на выбранном отрезке под заданной кривой методом численного интегрирования.
Программа должна обеспечить ввод с клавиатуры уравнений функций и нахождение значения площади под полученной кривой. И есть загвоздка, как обеспечить с клавиатуры ввод уравнений функций, программа создается через Windows Forms, т.е. там нужно реализовать эту функцию... |
Arantar, нужно реализовать лексический и синтаксический анализаторы, осуществляющие разбор грамматики математических выражений (и саму грамматику под нужную схему подогнать). Грамматика мат. выражений проста, её хоть грамматикой простого предшествования можно представить, а для таких грамматик есть простой и эффективный алгоритм разбора. В общем-то, задача сугубо техническая и требует освоения методов синтаксического анализа (лексический тут элементарен).
Возможно, в C# даже есть соответствующие компоненты, но я этим не занимался и потому не знаю... Ну а если лень делать, то можно предписать вбивать функцию в префиксной или постфиксной формах. Тут вообще мудрить с разбором не придётся, до того всё просто. |
Хотелось бы примерчик небольшой увидеть этого, если не трудно...
|
|
Arantar, учите матчасть.
Для разбора математических выражений я в своё время использовал следующую грамматику (привожу её в формате моей программы для построения матрицы предшествования, там из названия разделов ясно, где что): Скрытый текст: Что же касается префиксной/постфиксных записей - то это в Википедию по ссылкам. Теперь что касается "примерчика". Вообще-то у меня есть программа для построения по грамматике матрицы предшествования и последующей генерации выходного файлы с полным описанием и грамматики, и матрицы. А также программа, генерирующая по этому файлу код на C++ с синтаксическим анализатором. Но Вы едва ли во всём этом разберётесь, так что читайте теорию. Ну или если лень, используйте постфикс/префикс. Там, повторяюсь, всё элементарно. Знак перед/после операндов, никаких скобок. Читай себе символы и определяй, что это. Кстати, и для инфиксной формы (сиречь обычная форма записи, когда оператор стоит между операндов) можно не заморачиваться с грамматикой. Используйте стек, и всё (в грамматике простого предшествования он, собственно, и используется). Я использовал грамматику, дабы была возможность её расширения. Ну да, или используйте готовую библиотеку, ссылку на которую кинул CMETAHA. :Grin: Но вообще-то, знать основы построения трансляторов не помешает. |
Знания в c# далеки от хороших, поэтому задаю вопрос:
Собственно задача у меня такова:найти объект на изображении с помощью образца(второе изображение). Сейчас я использую примитивный алгоритм(знаю, что есть проще намного-но хочу сделать именно с таким).Идет сравнение каждого пикселя с пикселями на образце(GetPixel). Далее,для отметки совпадения, создается третье изображения с размерами, как у первого изображения и полностью черного цвета.И в случае совпадения, пиксель на третьем изображении с координатами, как у совпавшего пикселя на первом, красится в белый цвет(SetPixel). Далее идет обработка третьего изображения, по свойствам образца определяем нужный нам объект и обводим этот объект на первом.Но это здесь не важно. суть такова, что сравнение объектов идет 5<x<10 минут, и меня это НЕ УСТРАИВАЕТ. Понятное дело, что операций перебор идет более 100млн пикселей, и наверняка замедляет процесс именно GetPixel. Вопрос у меня такой: 1)Чем можно заменить GetPixel для ускорения программы 2)Какое доп условие можно добавить, чтобы снизить во много раз кол-во сравнений.(ну там допустим средний цвет области.Если близко к среднему цвету образца, то сравниваем.Если далек, то оставляем) Скрытый текст: |
OverDoser, это область искусственного интеллекта - раз. Но об этом пока говорить рано, чувствую.
Далее, сравнивать по цветам пикселей - заведомо не лучшая идея. Большинство алгоритмов сжатия изображения с потерями, т.е. алгоритмов, которые отбрасывают "слабоощутимую" информацию, осуществляют преобразование изображения в цветовую модель YUV. Вообще, если речь идёт об ускорении работы алгоритма со сравнением, то я бы порекомендовал именно изучить алгоритмы сжатия изображения и сравнивать результирующие коэффициенты уже после сжатия. Обратите особое внимание на вейвлеты - полагаю, именно результаты вейвлет-преобразования Вам подойдут особенно хорошо, поскольку представляют собой уменьшенные копии рисунка. Соответственно, сравниваем грубую часть вейвлет-разложения, если сходится - то можно сравнивать более тонкие коэффициенты. Итог: если не хотите связываться с искусственным интеллектом (хотя обращение к нему не альтернатива, а дополнение алгоритма, на самом деле), используйте методы сжатие изображения с потерями и сравнивайте их результат. Такие методы строятся на математических функциях и сколь угодно точно могут представлять исходное изображение, выделяя так или иначе "грубые" коэффициенты и "более точные" - чисто исходя из своего предназначения. Как отмечалось выше, из всех методов сжатия мне кажется лучшим применение вейвлетов в силу построения уменьшенных копий исходного изображения, а не малопонятных матриц коэффициентов. P.S. Рекомендую книгу "Фракталы и вейвлеты для сжатия изображений в действии", С. Уэлстид. |
pokibor, То есть я правильно вас понял:
Выделяю на 1 изображении область,равную 2 изображению. Произвожу вейвлет преобразование этой области и 2 рисунка. Оцениваю коэффициенты.Если совпадают, то произвожу точное сравнение.И так на всем изображении? |
OverDoser, Вы оба рисунка приводите к вейвлет-преобразованию, а затем начинаете искать на соответствующих уровнях коэффициентов первого изображения второе изображение. Т.е. искать вхождение "крупных" копий изображения сначала на "крупных" копиях картинки, потом на более мелких. Естественно, о точном сходстве речи идти не может, тут необходимо выработать определённый критерий похожести. Однако и в Вашем методе о точном сходстве до единого пикселя можно говорить весьма условно.
P.S. Кстати, алгоритмы распознавания образов используют, как правило, нейронные сети. Если же Вы ищите именно точное сходство, пиксель к пикселю, то придумайте какую-нибудь контрольную сумму по изображению, и всё. Но тогда задача будет совершенно бесполезной и нереалистичной. |
pokibor, То, что используются здесь в основном нейронные системы-читал, но для меня пока рано)
С принципом распознавания здесь я понял, спасибо) Теперь будем разбираться с самим вейвлет-преобразованию) |
Не подскажете видеоуроки(ну или любой другой материал), с помощью которых можно с нуля обучиться этому языку программирования.
|
deriop,
учимся читать FAQ. |
Значит, вернусь к задаче.
Таки мне удалось сократить время выполнения операции сравнение пикселей( с 7 минут до 1 с за счет другого подхода +распараллеливания задачи). Теперь задача моя формулируется по другому: Имеется два изображения:первое изображение бинарное(те состоит из 0x000000 и oxFFFFFF), на котором изображены различны объекты(они не пересекаются) На нем фон-черное, объекты-белое. Второе изображение цветное(известно только, что фон белый), на нем изображен какой то объект( и известно, что этот объект изображен на 1 изображении:он может быть повернут под углом или масштабирован,но сама по себе форма остается постоянной). С помощью каких средств и способов можно реализовать поиск объекта,изображенного на втором рисунке, на первом изображении? |
OverDoser, давайте сразу решим, алгоритм какой сложности и работоспособности Вам нужен. Всегда можно перебирать "в тупую", ограничиваясь лишь элементарной оптимизацией вроде подсчёта контрольной суммы и прочего подобного.
И, конечно, есть более сложные, но и куда более эффективные алгоритмы, требующие определённого преобразования данных, использования методов искусственного интеллекта, обучения и прочего. Конкретно Ваш случай, я думаю, предполагает вектризацию объектов как основу алгоритма. Поворачивать и масштабировать векторные изображения куда проще, нежели растровые (что очевидно). Тем более на одном из изображений фактически контур объекта и изображён. P.S. А вообще, тут можно с огромным интересом обсудить применение фрактального подхода, т.е. подбор для изображения IFS и сравнения коэффициентов. Но это совершенно отдельная тема. |
pokibor, С учетом того, что сам по себе алгоритм имеет довольно большое кол-во условностей, считаю, что для поиска не нужен сильно мудреный способ поиска.(тк первоначальный этап алгоритма-отбор лишних цветов-сводит на нет необходимость в сложных алгоритмов)
Те чтобы сочеталось простота+эффективность+(если это возможно)быстрота |
OverDoser, тогда перебирайте все возможные растровые варианты, раз быстрота на третьем месте :Grin:
Дело в том, что вектризация всё равно необходима, на мой взгляд. Масштабирование - ещё куда ни шло, можно, как Вы делали в предыдущем алгоритме, привести одно изображение к масштабу другого, а вот поворот... ну разве что вращать на 360 градусов с достаточно малым шагом и (для каждого!) масштабировать, затем смотреть. Это трудно назвать эффективным и быстрым алгоритмом, тем более учитывая возможные искажения при повороте. С вектризованным же изображением работать попроще будет. Как минимум, поворачивать/масштабировать надо будет вектора, а не пиксели, что само по себе сильно упрощает дело. Ну и затем можно накрутить массу оптимизационных улучшений. Например, если вектризация идёт до отрезков контура, то можно запоминать последовательность их длин на контуре, и сравнивать сперва именно длины (отсюда сразу с хорошей вероятностью получается масштаб). Но, опять же, всё это будет работать лишь примерно, в определённых пределах, за счёт погрешностей. |
pokibor, А возможно ли использование индивидуальных свойств объектов(если они, конечно, есть =) ), которые не меняются при масштабировании?
Мы же можем их перебрать, и если погрешность очень низкая, то очевидно, что это нужный нам объект. |
| Часовой пояс GMT +4, время: 19:26. |
Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.