Проверка выравнивания изображения - PullRequest
1 голос
/ 09 июня 2009

Я написал свое собственное программное обеспечение на C # для выполнения микроскопических изображений. Смотрите этот скриншот .

Изображения, которые можно увидеть там, имеют один и тот же образец, но записаны с помощью физически разных детекторов. Для моих экспериментов крайне важно, чтобы эти изображения были ровно . Я думал, что проще всего было бы как-то смешать / вычесть два растровых изображения, но это не дает мне хороших результатов. Поэтому я ищу лучший способ сделать это.

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

Буду очень признателен за любую помощь!

Ответы [ 5 ]

4 голосов
/ 24 июля 2009

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

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

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

Пример MATLAB: Регистрация изображения с использованием нормализованной взаимной корреляции

Википедия называет это " фазовая корреляция ", а также описывает , делая его инвариантным к масштабированию и повороту :

Этот метод может быть расширен для определения различий поворота и масштабирования между двумя изображениями, сначала преобразовав изображения в лог-полярные координаты. Благодаря свойствам преобразования Фурье параметры поворота и масштабирования могут быть определены способом, не зависящим от преобразования.

1 голос
/ 08 сентября 2009

Я решил эту проблему некоторое время назад ... Поскольку мне нужно только проверить, что два изображения с двух детекторов идеально выровнены, и, поскольку мне не нужно пытаться выровнять их, если они не совпадают, я решил это следующим образом:

1) Используйте Aforge Framework и примените фильтр оттенков серого к обоим изображениям. Это усреднит значения RGB для каждого пикселя. 2) Для одного изображения примените ChannelFilter, чтобы сохранить только красный канал. 3) На другом изображении примените ChannelFilter, чтобы сохранить только зеленый канал. 4) Добавьте оба изображения.

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

AForge.Imaging.Filters.IFilter filterR = new AForge.Imaging.Filters.ChannelFiltering(new AForge.IntRange( 0, 255 ), new AForge.IntRange( 0, 0 ), new AForge.IntRange( 0, 0 ));
AForge.Imaging.Filters.IFilter filterG = new AForge.Imaging.Filters.ChannelFiltering(new AForge.IntRange( 0, 0 ), new AForge.IntRange( 0, 255 ), new AForge.IntRange( 0, 0 ));
AForge.Imaging.Filters.GrayscaleRMY FilterGray= new AForge.Imaging.Filters.GrayscaleRMY();
AForge.Imaging.Filters.Add filterADD = new AForge.Imaging.Filters.Add();

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

Спасибо за все комментарии!

0 голосов
/ 09 июня 2009

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

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

0 голосов
/ 09 июня 2009

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

Типичным примером является размещение + маркеров по углам. Вы также можете иногда увидеть штрих-коды, используемые для этой цели.

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

0 голосов
/ 09 июня 2009

Так что детекторы разные, поэтому выравнивание будет немного неправильным, в этом пикселе (256,512) на изображении 1 может быть элемент, представленный пикселем (257,513) на изображении 2. Это проблема? Как насчет увеличения? Если детектор другой, не может ли увеличение немного отличаться?

Если вы имеете в виду что-то подобное выше и, судя по скриншоту, не должно быть слишком сложно найти центры 4 или 5 областей с наивысшей интенсивностью - нормализуйте данные и просмотрите все изображение в поисках блоков из 9 соседних пикселей с самой высокой средней интенсивностью. Обратите внимание на центральный пиксель четырех или пяти из этих функций для каждого изображения. Затем рассчитайте расстояние между каждым набором пикселей между двумя изображениями.

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

Так бы я и начал.

...