Изображение одного цвета фона - Matlab - PullRequest
1 голос
/ 06 июля 2019

В приведенном ниже коде я повернул изображение. Как я могу получить один цвет фона (белый или черный)?

код:

close all;
clear;
clc;

url='http://www.clker.com/cliparts/T/i/o/c/X/Q/airplane-md.png';
RI = imread(url);
I = rgb2gray(RI);

BI = imbinarize(I);

LI = bwlabel(BI);
mea = regionprops(LI, 'All');
RI = imrotate(RI, -mea(1).Orientation,'loose');
imshow(RI);

Ответы [ 2 ]

2 голосов
/ 06 июля 2019

Учитывая, что изображение представляет собой простой логотип (в отличие от фотографии, например), вы, вероятно, можете использовать логическую индексацию, чтобы изменить все черные пиксели, добавленные путем imrotate, на белые пиксели.

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

%Load RBG image to test on
RI = imread('peppers.png');
%Create black region to remove
RI(100:150,100:150,:) = 0;

figure()
imshow(RI)
title('Original Image')

%Replace all black pixels with white
inds = sum(RI,3)==0;
RI_new = RI;
RI_new(repmat(inds,1,1,3))=255;

figure()
imshow(RI_new)
title('New Image')

По сравнению с ответом @SardarUsama, это слабость, заключающаяся в том, что в исходном изображении нет черных пикселей, а есть преимущество использования только встроенных функций Matlab.

Редактировать: Обновлено, чтобы показать пример на изображении RGB, а не в оттенках серого

1 голос
/ 06 июля 2019

Ваше оригинальное изображение имеет белый фон. Когда вы поворачиваете его, вы получаете черные пиксели на заднем плане, чтобы заполнить матрицу изображения. Это может быть связано с тем, что предварительное выделение матрицы повернутых изображений выполняется с нулями, которые затем переводятся в черный цвет (возможно, в imrotatemex и в строках 116 и 118 в imrotate). Вы можете использовать эти альтернативные реализации из imrotate, но предварительно выделить матрицу из них (для двойных данных) или 255 (для данных uint8).

Например, в строке 31 реализация Роди , т. Е .:

imagerot = zeros([max(dest) p],class(image));

Измените эту строку на:

imagerot = 255*ones([max(dest) p],'uint8');   %Your image is uint8 in this case

Результат:
result

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