Применение изображения в качестве маски в Matlab

Я новый пользователь по обработке изображений через Matlab. Моей первой целью является применение статьи и сравнение моих результатов и результатов авторов.
Статью можно найти здесь: http://arxiv.org/ftp/arxiv/papers/1306/1306.0139.pdf

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

Вторая проблема, объединение изображений: я хочу применить маску 1 к Лене. Но я не хочу пользоваться пейнтом =) С другой стороны, можно ли объединить изображения и сохранить лену?


person user3470711    schedule 28.03.2016    source источник
comment
Не могли бы вы поделиться кодом того, что вы пытались до сих пор? Спасибо   -  person Cynthia GS    schedule 28.03.2016
comment
Я мог использовать только коды imread и imshow для маски и лены, другими словами, я действительно далеко :)   -  person user3470711    schedule 29.03.2016
comment
Привет, @ user3470711, я разместил ответ на твой вопрос, дай мне знать, если он работает, и, пожалуйста, проголосуй за него, если он работает! Спасибо!   -  person Cynthia GS    schedule 02.04.2016


Ответы (2)


Вам нужно создать массив масок. Первый шаг, вероятно, состоит в том, чтобы превратить захваченное изображение с рис. 7 в черно-белое изображение:

Mask = im2bw(Figure7, 0.5);

Теперь весь фон (белый) равен 1, а черная линия (или текст) равна 0. Давайте удостоверимся, что ваше изображение Лены, которое вы получили от imread, на самом деле имеет оттенки серого:

LenaGray = rgb2gray(Lena);

Наконец, примените маску к Лене:

LenaAndMask = LenaGray.*Mask;

Конечно, эта последняя строка не будет работать, если у Лены и Figure7 разные размеры, но это легко исправить.

person Cynthia GS    schedule 29.03.2016
comment
Спасибо, @Cynthia GS! Как вы сказали, последняя строка не работает. Стоит ли менять класс Маски? Имя Размер Байты Класс Атрибуты I 256x256 65536 uint8 M 256x256x3 196608 uint8 Маска 256x256 65536 логический - person user3470711; 02.04.2016

Прежде всего, Вы должны знать, что эта статья опубликована в архиве. когда статьи публикуются в архиве, всегда полезно узнать больше об авторе и/или университете, опубликовавшем статью. ПОВЕРЬТЕ мне в этом: вам не нужно тратить свое время на эту статью.

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

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

если вы сохранили изображение в формате jpeg. искажения из-за высокочастотных краев изменят форму края.

person Bashar Haddad    schedule 30.03.2016
comment
На самом деле, я задавал этот вопрос @dfri I=imread('lena_gray_256.tif'); M=imread('M1.tif'); M1=im2bw(M,0.5); ML=I; ML(M1==0)= 0; imshow(ML); И решено!! Я всем благодарен! - person user3470711; 04.04.2016