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
我究竟做错了什么?
完全摆脱循环会更快:
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)