2014-05-07 10 views
2

Я разрабатываю проект обнаружения фар автомобилей в ночной сцене. Я работаю над демо на MATLAB. Моя проблема в том, что мне нужно найти область интереса (ROI), чтобы получить низкую вычислительную потребность. Мое решение вычисляет полную интенсивность в строке, и если интенсивность строки ниже порогового значения, она затемняется.Как сохранить часть изображения в массивах или матрицах в Matlab

[rows col] = size(img1); 
sumValue=[]; 
sum1 = sum(sum(img1)/(rows*col)); 
for a=1:1:rows 
    sumValue = sum(img1(a,:))/col; 
    if (sumValue <sum1+40) 
     img1(a,:)=0; 
    end 
end 

И вот результат:

enter image description here

Теперь я хочу, чтобы сохранить яркие части изображения в массивах или матриц, так что я могу удалить небольшие яркие детали и оставить только большую часть , Если кто-нибудь имеет какие-либо идеи, PLZ дать мне несколько предложений.

+0

Либо сохранить номера строк, которые нужно удалить где-нибудь, и удалить их после окончания цикла. Или получите строки, которые нужно удалить, используя строковую сумму, и определите, являются ли суммы равными нулю и удаляют их с помощью логической индексации, как это: 'img1 (sum (img, 2) == 0,:) = [];' – Divakar

+0

Not ответ на ваш вопрос, но предложение: вы можете сократить свой ROI, работая в другом цветовом пространстве, которое придает значение яркости фар. Вы можете попытаться отделить их от оставшегося изображения. Я оставлю это вам, чтобы выяснить, какое цветовое пространство выбрать и включить его в ваш текущий код в зависимости от времени/мотивации, которое у вас есть. Кроме того, вы можете бинарировать этот результат, установив порог. Затем выберите ROI и используйте эти индексы для формирования ROI. – totjammykd

ответ

0

Я уверен, что это может быть оптимизировано немного больше.

new_im = zeros(size(im)); 

% Loop through each column 
for c=1:1:size(im,2) 
    column = im(:,c); 

    % The first non-zero value in each column will be the top of the window 
    upper_candidates = find(column>0); 
    top = upper_candidates(1); 

    % The first zero value after that will be your lower boundary 
    lower_candidates = find(column(top:end) == 0); 
    bottom = lower_candidates(1); 

    % Insert each column into the new image 
    new_im = im(top:bottom,c); 
end 
Смежные вопросы