Простейшее ответ был бы,
c = [70 100 70];
thresh = 50;
A = imread('image.jpg');
B = zeros(size(A));
Ar = A(:,:,1);
Ag = A(:,:,2);
Ab = A(:,:,3);
Br = B(:,:,1);
Bg = B(:,:,2);
Bb = B(:,:,3);
logmap = (Ar > (c(1) - thresh)).*(Ar < (c(1) + thresh)).*...
(Ag > (c(2) - thresh)).*(Ag < (c(2) + thresh)).*...
(Ab > (c(3) - thresh)).*(Ab < (c(3) + thresh));
Ar(logmap == 1) = Br(logmap == 1);
Ag(logmap == 1) = Bg(logmap == 1);
Ab(logmap == 1) = Bb(logmap == 1);
A = cat(3 ,Ar,Ag,Ab);
imshow(A);
Вы должны изменить c
(цвет фона) и thresh
(порог c
) и найти лучшее, что подходит для вашего фона.
Вы можете определить B
как новое фоновое изображение. Пример примера Bb(:,:) = 255;
даст вам синий фон.
Вы можете даже определить B
как изображение.
Для того, чтобы обнаружить фон, вы можете найти цвет, который наиболее часто используется в изображении, но это не обязательно фона, я думаю.
Знаете ли вы, что цвет фона? – Shai
Нет, я не знаю. Поскольку есть разные случаи, некоторые из них могут быть зеленым цветом фона, а некоторые - другими. Есть ли способ сделать это? – kim
Кстати, цвет фона может немного отличаться между разными областями. Как и изображение, показанное выше, некоторые области светлее зеленого. – kim