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

时间:2016-10-08 18:41:48

标签: matlab loops image-processing binary

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

这是我实施的代码。图像是特定图像;不是变量。

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);

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

我做错了什么?

2 个答案:

答案 0 :(得分: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);

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

enter image description here

我们看到这确实如我们所料,完全是二元的。此外,您可以通过调用whos B来检查此问题,B告诉我们logical确实属于whos B Name Size Bytes Class Attributes B 100x100 10000 logical 类型,因此只有0和1。

if ($con->query($sql) === TRUE) {
    $id = mysqli_insert_id($con);
    if ($con->query($sql2) === TRUE) {
        echo "New record created successfully";
        echo $id;
    }
} else {
    echo "Error: " . $sql . "<br>" . $con->error;
}

答案 1 :(得分:4)

保存图像时出现问题。如果您check the description of imwrite,您会看到如果您想将图片保存为二进制文件,则应选择BMPPNGTIFF。这些是无损格式。另一方面,JPEGlossy compression format

此外,根据Adriaan's answer

,我的代码非常紧凑
function [] = thresholdImg(X)
A=imread('car_gray.jpg');
B = sum(A, 3) > X
figure,imshow(B);