Давать изображение черному фону? - PullRequest
2 голосов
/ 07 февраля 2012

Есть ли способ убрать белый фон и превратить его в черный в MATLAB?

Скажите, у меня есть это изображение:

enter image description here

Я получаю следующий вывод, когда применяю код, предложенный в ответе: который не совершенен

enter image description here

Ответы [ 4 ]

6 голосов
/ 07 февраля 2012

Проблема, как заметил Андрей, состоит в том, что не все пиксели фона "255 белых". Вероятно, это происходит из-за алгоритма сжатия JPEG, а также из-за того, что на изображении есть тень от плода.

Чтобы решить эту проблему, сначала получите бинарную маску области фруктов, размывая изображение (это необходимо для преодоления артефактов JPEG), а затем пороговое значение для изображения с очень высоким значением, но немного ниже, чем 255. Вот решение в Matlab:

I = imread('http://i.stack.imgur.com/5p4jV.jpg'); % Load your image.
H = fspecial('gaussian'); % Create the filter kernel.
I = imfilter(I,H); % Blur the image.

Mask = im2bw(Ig, 0.9); % Now we are generating the binary mask.
I([Mask, Mask, Mask]) = 0; % Now we have the image.

Вот вывод (вы также можете попробовать разные пороговые значения в im2bw):

enter image description here

2 голосов
/ 07 февраля 2012

Вы потерпели неудачу из-за эффекта сглаживания, который размывает края вашего изображения. Эти пиксели, которые не были удалены, не являются 255! Они немного ниже. В основном у вас есть 2 варианта:

(я написал их с точки зрения использования Matlab).

  1. Выберите соответствующую деталь с помощью imfreehand, а затем создайте маску, вызвав createMask из API.
  2. Нахождение правильного порогового уровня, который не равен 255. (Гораздо сложнее - если возможно)

Вот код Matlab для первого:

function SO1
    im = imread('c:\x.jpg');
    figure();
    imshow(im);
    f = imfreehand();
    mask = f.createMask();
    mask = repmat(mask,[1 1 3]);
    im(~mask) = 0;
    figure;imshow(im);
end
0 голосов
/ 13 марта 2017

Вы должны нарисовать изображение на черном фоне.

//Your bitmap
Bitmap originalImage = new Bitmap(100, 100);

//Black background
Bitmap bitmap = new Bitmap(100, 100);
Graphics g = Graphics.FromImage(bitmap);

//Draw the background
g.FillRectangle(Brushes.Black, 0, 0, 100, 100);

//Draw the original bitmap over the black one
g.DrawImage(originalImage, 0, 0);
0 голосов
/ 07 февраля 2012

да.если ваше изображение сохраняется как переменная с именем img:

thr = 255;
mask = sum(img,3)==thr*3;
for i=1:3
    c = img(:,:,i);
    c(mask)=0;
    img(:,:,i)=c;
end

| -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...