2016-10-08 6 views
1

Я использую MATLAB 2012b.MATLAB наложение белой области двоичного изображения с изображением rgb

Я был в состоянии получить объекты очертить в изображении: image
с использованием метода активного контура Сегментация и результат в двоичной маске:

Как я могу заполнить белую область бинарного изображения с оригинальным изображением rgb?

В принципе, я хочу сделать фон полностью черным.

Вот мой код:

gambarOri = imread(pathGambar); 
A = rgb2gray(gambarOri); 
mask = zeros(size(A)); mask(10:end-10,10:end-10) = 1; 
BW = activecontour(A, mask, 500); 
figure, subplot(1, 2, 1), imshow(A), title('Grayscale'); 
subplot(1, 2, 2), imshow(BW), title('Segmented image in Binary'); 

ответ

0

Вы пушечное Наложение RGB на бинарном изображении, так как типы данных не совпадают. Что вы можете сделать, так это изменить изображение RGB в соответствии с бинарным изображением. Например, вы можете заменить значение изображения RGB в false областях BW с нулями:

% separating RGB channels: 
R = gambarOri(:, :, 1); 
G = gambarOri(:, :, 2); 
B = gambarOri(:, :, 3); 
% placing zeros where BW is FALSE: 
R(~BW) = 0; 
G(~BW) = 0; 
B(~BW) = 0; 
% concatenate color layers into final result: 
blackBG = cat(3, R, G, B); 
% figure; imshow(blackBG) 

С этим результатом для предоставленного изображения: enter image description here

+0

Таким образом, невозможно накладывать изображения разных типов данных, спасибо за факт. Кстати, я попробовал ваш метод, а [результат] (http://i.imgur.com/Gh4JJqc.jpg) не объединяет слои в черный фон. Означает ли это, что моя ложная область BW - это не белый регион? –

+0

Ну, это выглядит странно, потому что, если вы копируете и вставляете мой код после своего, вы должны получить тот же результат, что и я. вы пропустили что-то в этом процессе? Или, может быть, вы делали другие операции над переменными в среднем? – erfan

0

Вы можете использовать :

blackBG = uint8(bsxfun(@times, double(gambarOri), BW)); 
Смежные вопросы