Arrays 在Matlab中如何将部分图像保存为数组或矩阵

Arrays 在Matlab中如何将部分图像保存为数组或矩阵,arrays,matlab,image-processing,matrix,computer-vision,Arrays,Matlab,Image Processing,Matrix,Computer Vision,我正在开发一个在夜景中检测车辆头灯的项目。我正在MATLAB上做一个演示。我的问题是,我需要找到感兴趣的区域(ROI),以获得较低的计算需求。我的解决方案是计算每行的总强度,如果该行的强度低于阈值,它将变黑 [rows col] = size(img1); sumValue=[]; sum1 = sum(sum(img1)/(rows*col)); for a=1:1:rows sumValue = sum(img1(a,:))/col; if (sumValue <sum

我正在开发一个在夜景中检测车辆头灯的项目。我正在MATLAB上做一个演示。我的问题是,我需要找到感兴趣的区域(ROI),以获得较低的计算需求。我的解决方案是计算每行的总强度,如果该行的强度低于阈值,它将变黑

[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
[rows-col]=大小(img1);
sumValue=[];
sum1=总和(总和(img1)/(行*列));
对于a=1:1:行
sumValue=总和(img1(a,:)/col;

如果(sumValue,我相信这可以再优化一点

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

将要删除的行号存储在某个位置,并在循环结束后将其删除。或者使用行总和获取要删除的行,并检测总和是否为零,然后使用如下逻辑索引将其删除-
img1(sum(img,2)==0,:)=[];
这不是对您问题的回答,而是一个建议:您可以通过在不同的颜色空间中工作来降低ROI,该颜色空间重视前照灯的亮度。您可以尝试将前照灯与剩余图像分开。我将让您决定选择什么颜色空间,并将其纳入当前代码中取决于你的时间/动机。此外,你可以通过设置阈值对结果进行二值化。然后选择投资回报率并使用这些指数形成投资回报率。