2015-04-30 3 views
2

Это может быть легко, но я все еще немного борюсь. Как сравнить два изображения, если я хочу узнать, идентичны ли они? Скажем, у меня есть изображение A и изображение и B я хочу сделать что-то вродеСравнение двух изображений как идентичных?

if (A == B) ...

, но это не работает.

+0

Если мой ответ не помогает, вы можете разместить код, который вы пытаетесь использовать? – gabe3886

+0

Вы можете видеть это ранее. http://stackoverflow.com/questions/3270929/compare-2-images-in-php –

+0

@ gabe3886 Спасибо. Второй ответ уже соответствует моим потребностям. –

ответ

2

Я думаю, вам нужно указать немного более четко, что вы подразумеваете под идентичными. В рамках анализа изображения на DigitalMicrograph это может быть (например,):

1) Идентичный файл на диске.

Это были ответы других пользователей. Но для простоты - если изображение открыто в ДМ вы можете узнать, к какому «файл» он связан следующим кодом:

image img := GetFrontImage() 
imageDocument doc = img.ImageGetOrCreateImageDocument() 
OKDialog("--> "+doc.ImageDocumentGetCurrentFile()) 

Обратите внимание, что файлы на диске связаны с imageDocuments, а не изображения.

2) Одинаковые значения пикселей во всех пикселей

Просто сравните сумму разницы изображения!

image A 
image B 
if (0 == sum(A-B)) OKDialog("Identical!") 

Код предполагает, что оба изображения одного типа, но вы можете проверять типы отдельно.

3) Идентичный объект памяти

Вы можете иметь несколько переменных, относящихся к одной и той же «образ», то есть у вас есть одно изображение в качестве локальной переменной, а затем перебирать список изображений для идентификации это изображение в списке. Для этого вы можете использовать либо imageLabel, либо идентификатор изображения. Любому изображению в памяти присваивается каждый из них автоматически. В то время как imageLabels повторно используются, когда становятся свободными, идентификаторы изображений монотонно увеличиваются с момента запуска приложения (начиная с 1). Я думаю, что imageID лучше использовать в целом.

image A 
image B 
if (A.ImageGetLabel() == B.ImageGetLabel()) OKDialog("Identical!") 
if (A.ImageGetID() == B.ImageGetID()) OKDialog("Identical!") 

4) Изображение представляет собой специфический «уникальный» образ, но он был сохранен и открыт вновь.

Типичный сценарий здесь - обследование-изображения, связанные с данными. Возможно, вам захочется открыть данные и опрос-изображение и проверить, является ли это «правильным» обзором. Для этого существует определенный объект сценария под названием «Глобальный идентификатор изображения», который вы найдете в разделе справки F1 в разделе «Объекты». Он похож на контрольную сумму, но не одну. Этот идентификатор состоит из 4 длинных значений, которые создаются при создании изображения и никогда не изменяются впоследствии. (Так что изменение значения или тега данных изображения не изменит этот глобальный идентификатор.) Основное отличие от идентификатора imageID заключается в том, что Global ID остается, когда вы сохраняете & загружаете изображение.

Global Image ID

+0

Большое вам спасибо. Это был третий пример, который я хотел иметь. Но другие примеры также велики! –

0

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

+0

Большое спасибо за ваш ответ. Хорошая идея для идентичности файлов, но мое приложение отличается. Я хотел сравнить два изображения DigitalMicrograph, пока они открыты (и даже не сохранены). –

 Смежные вопросы

  • Нет связанных вопросов^_^