Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Попиксельное сравнение картинок Добавлено: 07.06.10 13:36  

Автор вопроса:  Spiritsun

Ответить

  Ответы Всего ответов: 28  

Номер ответа: 16
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #16 Добавлено: 09.06.10 13:46
вычисление контрольной суммы двух файлов стандартными средствами будет быстрее, чем "ручной" перебор двух массивов

Мы говорим о картинках на винте или о картинках, скажем, в ресурсах или загруженных в память? Как тогда быть? Эти "стандартные" средства тоже в состоянии вычислить контрольную сумму? Или все же придется снизойти до перебора массива и подсчета искомой суммы?

Ответить

Номер ответа: 17
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #17 Добавлено: 09.06.10 13:57
если они совпадают, накладываем А на другое с помощью BitBlt(.NET - DrawImageUnstretched) с битовой операцией

А теперь напряги свою извилину и немного подумай, что при этом произойдет.. (навскидку)
1. Создастся графический контекст (достаточно ресурсоемкая операция, аналог CreateGraphics)
2. Выделится кусок памяти для новой картинки
3. И далее по кругу:
- берем байт из первой кртинки

Ответить

Номер ответа: 18
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #18 Добавлено: 09.06.10 14:02
сорри..
- берется байт из второй
- вычисляется маска
- помещается в новую картинку..

и так до конца всего массива .. точнее до КОНЦА картинки!
Я же предложил: в хуждем варианте имея указатель на картинку через маршалинг сдампить кусок памяти.. (имхо,затраты минимальные) и в одном цикле пробежаться по байтам.. Если первый байт различается, то нех дальше и сравнивать...
Твой вариант - реально, пособие для начинающих извращенцев..

Ответить

Номер ответа: 19
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #19 Добавлено: 09.06.10 14:04
Разумеется мой вариант приемлем если картинки уже загружены в память..

Ответить

Номер ответа: 20
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #20
Добавлено: 09.06.10 14:33
Имхо, если загружать в буфер через GetDIBits, а процедуру сравнения написать на ассемблере (даже тупо repne cmpsb), то на картинках относительно небольших размеров время сравнения будет очень мало.

Ответить

Номер ответа: 21
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #21
Добавлено: 09.06.10 14:58

EROS пишет:
сорри..
- берется байт из второй
- вычисляется маска
- помещается в новую картинку..

и так до конца всего массива .. точнее до КОНЦА картинки!
Я же предложил: в хуждем варианте имея указатель на картинку через маршалинг сдампить кусок памяти.. (имхо,затраты минимальные) и в одном цикле пробежаться по байтам.. Если первый байт различается, то нех дальше и сравнивать...
Твой вариант - реально, пособие для начинающих извращенцев..

Да, но зато в нем нет циклов, и он, все же, работает быстрее, чем побайтавая херь. Конечно, Unmanaged-вася работает по скорости приближенно равной этой, но все равно, BitBlt по моим понятиям работает быстрее циклов. Насчет "создать битмап" - да ради бога, можете использовать один из данных и рисовать и ресайзить прямо на нем. Такое никто не запрещал.

Ответить

Номер ответа: 22
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #22
Добавлено: 09.06.10 14:59
VBDUnit пишет:
работает быстрее, чем побайтавая херь

Она, конечно сама по себе и есть побайтовая херь, но там вроде сделано все пошустрее, со всякими SSE и прочей лабудой.

Ответить

Номер ответа: 23
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #23 Добавлено: 09.06.10 15:29
но зато в нем нет циклов, и он, все же, работает быстрее, чем побайтавая херь.

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

то на картинках относительно небольших размеров время сравнения будет очень мало.

даже если делать средствами НЕТ на картинках 1280*1024 время обработки составит доли секунды.. Причем львиную долю времени будет занимать не дампирование памяти и сравнение, а именно загрузка картинки в память и создание объекта Graphics(применительно к моему варианту). Если использовать другие способы загрузки картинки и обработки, то время будет несравнимо меньше..,имхо

Ответить

Номер ответа: 24
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #24
Добавлено: 09.06.10 15:37
EROS пишет:
низком уровне..

Во, я как раз это и имел в виду.


EROS пишет:
Вся фишка в том, что в твоем случае будут обрабатываться абсолютно ВСЕ байты (при чем через жопу).. в моем же до первого неодинакового байта..


Да, но зато моя вася не будет рыпаться на чувака из-за твоего одного пикселя. Имхо, точное сравнение картинок васе врят ли нужно, ибо JPEG и прочая херь с его артефактами. Так что в моем случае как раз получается некая степень похожести, а не точное сравнение. Короче здесь зависит от того, что нужно васе.

Ответить

Номер ответа: 25
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #25 Добавлено: 09.06.10 15:43
VBD пишет:
Да, но зато в нем нет циклов, и он, все же, работает быстрее, чем побайтавая херь. Конечно, Unmanaged-вася работает по скорости приближенно равной этой, но все равно, BitBlt по моим понятиям работает быстрее циклов. Насчет "создать битмап" - да ради бога, можете использовать один из данных и рисовать и ресайзить прямо на нем. Такое никто не запрещал.

Хочешь бенчмарк сделать? Я ставлю на то что обычный unsafe код (C#) будет как минимум на 2 порядка быстрее чем тот бред который ты придумал.

Ответить

Номер ответа: 26
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #26
Добавлено: 09.06.10 16:01
А если сжимать через WPF? :D

Ответить

Номер ответа: 27
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #27
Добавлено: 09.06.10 17:21
ну тогда можно воспользоваться CUDA и сравнивать файл в многопоточном режиме.

Ответить

Номер ответа: 28
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #28
Добавлено: 09.06.10 22:55
Боюсь, нечетким сравнением графической информации тебе еще рано заниматься. Надо сначала как минимум изучить на хорошем вузовском уровне матан, линал, функан, тервер, дискру, после чего переходить к более специальным основам.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам