具有所需阈值的图像的二值化

Ryn*_*lzy 1 binary matlab loops image-processing

我正在尝试创建一个函数,它将被赋予灰度图像,它将根据设置的阈值进行二值化.我整天都在这,但没有成功.

这是我实现的代码.图像是特定图像; 不是变量.

function [ output_args ] = thresholdImg(X)
A=imread('car_gray.jpg');
B=zeros(size(A,1),size(A,2));
for l=1:size(A,1)
    for m=1:size(A,2)
        if(sum(A(l,m,:))>X)
            B(l,m)=1;
        end
    end
end
B=logical(B);
figure,imshow(B);
Run Code Online (Sandbox Code Playgroud)

我不想用imbinarize.我希望手动执行此操作,并且代码尽可能简单.图像的输出看起来像二进制,但是当您打印矩阵时,您会看到值不仅是0s,而是1s或255s

我究竟做错了什么?

Adr*_*aan 5

完全摆脱循环会更快:

function [] = thresholdImg(X)
A=imread('car_gray.jpg');
tmp=sum(A,3); % sum along the third dimension
B = zeros(size(tmp));
B(tmp>X) = 1; % Set all values above the threshold to be one
B=logical(B);
figure,imshow(B);
Run Code Online (Sandbox Code Playgroud)

使用以下条件:A = rand(100,100,3);X=0.6;我们得到这样的图片:

在此输入图像描述

我们看到这确实如我们所料,完全是二元的.另外,你可以通过调用来检查它whos B,它告诉我们B确实是类型logical,因此只有零和1.

whos B
  Name        Size             Bytes  Class      Attributes

  B         100x100            10000  logical    
Run Code Online (Sandbox Code Playgroud)