Использование ColorMap для изменения желтого объекта на изображении на зеленый в MatLab - PullRequest
0 голосов
/ 27 сентября 2018

Я довольно новичок в MatLab и прохожу факультативный курс, который требовал MatLab при прохождении MBA (да, совершенно в другой области).В рамках задания мы должны использовать цветовое отображение MatLab для преобразования желтого объекта на изображении ниже в зеленый:

avocado_image

Я использовал "imread"и импортировал его в Matlab.У меня также есть некоторый опыт работы с картой цветов с Matlab, но довольно простой.В предоставленных подсказках сказано, что я должен использовать функцию IMTOOL, чтобы определить диапазон значений r, g, b для желтых пикселей и фоновых пикселей.Я должен разработать алгоритм цветового отображения, который преобразует желтый объект в зеленый, но не затрагивает какой-либо фон.

В моем предыдущем упражнении мы конвертировали 255 значений в 1 и 0.путем деления на 255. Затем мы создали новую цветовую карту и применили ее, которая преобразовала цвета.Но я до сих пор не знаю, как собрать все это вместе.Я попробовал какой-то код, который я нашел из справки Matlab, но я никуда не попал.Мой подход состоял в том, чтобы импортировать изображение в Matlab, читать матрицу изображений.Для всех пикселей, которые близки к пикселям желтого, я заменяю их общим зеленым пикселем.Есть лучший способ сделать это?Если нет, то как бы я сделал это с простым кодом MatLab?

Кроме того, я проверил код в этой функции, и я на 10000000% уверен, что они спрашивают меня, не должно быть таксложный: https://www.mathworks.com/matlabcentral/fileexchange/26420-simplecolordetection

По просьбе, это код, который я до сих пор.Это смесь C и MatLab, так как я понимаю, что нужно сделать, и я сделал быстрый и грязный цикл C for, чтобы сделать это, и сейчас пытаюсь преобразовать его в MatLab:

for i = 1: image.columnlength
for j = 1: image.rowlenght

    rgb =  image(i, j);
    red = rgb(:,1); %rgb(1,:);
    green = rgb(:,2);%rgb(2,:);
    blue = rgb(:,3);%rgb(3,:);
    if( red > 200 && red < 250 && green > 200 && green < 250 && blue > 200 && blue < 250 
            //image(i, j ) = green

    end
 end
end

СпасибоСтив

1 Ответ

0 голосов
/ 01 октября 2018

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

imdata = imread('pic.jpg');

for i=1:size(imdata,1)
    for j=1:size(imdata,2)
        %'...' is just a code-linebreak in matlab for readability
        if  imdata(i,j,1)>150 && imdata(i,j,1)<250 && imdata(i,j,1)>200 && ...
            imdata(i,j,1)<250 && imdata(i,j,3)>100 && imdata(i,j,3)<250
            %lets say your green is [50,200,0]
            imdata(i,j,1)=50;
            imdata(i,j,2)=200;
            imdata(i,j,3)=0;
        end
    end
end

imshow(imdata)

changed colors Вы можете перейти к другим логическим условиям, таким как (imdata(i,j,1)<50 || imdata(i,j,1)>150) или imdata(i,j,1)==150 или почти любое другое условие, которое вы можете придумать.Также вы можете взглянуть на значения, чтобы найти правильные пороги для вас

figure
subplot(2,2,1)
mesh(imdata(:,:,1)) %red
subplot(2,2,2)
mesh(imdata(:,:,2)) %green
subplot(2,2,3)
mesh(imdata(:,:,3)) %blue
subplot(2,2,4)  
imshow(imdata)

В Matlab я бы попытался перейти к матричным операциям, а не циклически проходить через каждый пиксель, но это решение гораздо проще понятьи реконструировать.

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