【问题标题】:How to save part of image in arrays or matrices in Matlab如何在 Matlab 中将部分图像保存在数组或矩阵中
【发布时间】:2014-06-23 20:15:04
【问题描述】:

我正在开发一个在夜景中检测车辆前灯的项目。我正在 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

结果如下:

现在我想将图像的明亮部分保存在数组或矩阵中,以便我可以删除小的明亮部分并只保留大部分。如果有人有任何想法,请给我一些建议。

【问题讨论】:

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

标签: arrays matlab image-processing matrix computer-vision


【解决方案1】:

我相信这可以进一步优化。

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

【讨论】:

    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    相关资源
    最近更新 更多