2015-10-07 4 views
1

Я работаю с изображениями RGB, которые содержат один объект на фоне монохромного изображения.Изменение размера изображения для размещения вокруг изолированного объекта в MATLAB

Моя цель - изолировать объект на изображении и изменить размер изображения, чтобы он содержал только объект.

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

maskedImage = bsxfun(@times,originalimage, cast(binaryimage,class(originalimage))); 

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

two muppets

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

+0

У меня возникли проблемы с пониманием вашего заявления о проблеме. Можете ли вы показать нам примеры изображений и/или код, чтобы продемонстрировать, о чем вы говорите? Из того, что я собрал, вместо того, чтобы иметь маску, которая имеет произвольную форму, вы хотели бы использовать квадрат вместо этого, но это может привести к появлению фоновых пикселей в маске. Это то, что вы хотите? Пожалуйста, поделитесь с нами некоторым кодом, который вы сделали до сих пор, чтобы проиллюстрировать вашу точку зрения. – rayryeng

+0

Я редактировал вопрос. Надеюсь, теперь это имеет смысл. Я думаю, что я прошу гораздо проще, чем это: – user2802349

+0

О, я вижу. Вы в основном хотите ** обрезать изображение, чтобы он содержал только объект, и ни один из фона, да? – rayryeng

ответ

1

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

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

Как таковой:

%// Find all non-zero locations in the mask 
[row,col] = find(binaryImage); 

%// Find the top left corner of the mask 
topLeftRow = min(row); 
topLeftCol = min(col); 

%// Find the bottom right corner of the mask 
bottomRightRow = max(row); 
bottomRightCol = max(col); 

%// Extract the object 
extracted = maskedImage(topLeftRow:bottomRightRow, topLeftCol:bottomRightCol, :); 
+0

Еще раз спасибо. Вы помогли мне так много до сих пор.Все вопросы касаются интеллектуального оптического сортировщика, который я пытаюсь создать в MATLAB. – user2802349

+0

@ пользователь2802349 без проблем. Мне нравятся проблемы обработки изображений и алгоритмы. Продолжай спрашивать! – rayryeng

1

Слова дня являются обрамлению коробки!

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

См. Это Matlab help forum question для получения дополнительной информации о реализации в Matlab.

+0

Ссылка только ответы не приветствуются. Вы не знаете, когда истекут эти ссылки. Вместо этого, возьмите важные пункты с поста, поместите их в свой ответ и укажите ссылку в качестве ссылки. – rayryeng

+0

Кроме того, ссылка MathWorks не является правильным ответом. Это только рисует прямоугольник, охватывающий объект на изображении. Он не обрезает ограничительную рамку, охватывающую объект. – rayryeng

+0

Данг, хотел написать скелетный ответ, прежде чем добавлять к нему больше мяса. Но вопрос был отредактирован и прокомментирован с тех пор, чтобы ответить на спорный вопрос. Должен ли я удалить это? – Jiby