我正在尝试创建一个函数,它将被赋予一个灰度图像,它将根据设置的阈值进行二值化。我整天都在这,但没有成功。
这是我实施的代码。图像是特定图像;不是变量。
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
我做错了什么?
答案 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;
我们得到了这张照片:
我们看到这确实如我们所料,完全是二元的。此外,您可以通过调用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
,您会看到如果您想将图片保存为二进制文件,则应选择BMP
,PNG
或TIFF
。这些是无损格式。另一方面,JPEG
是lossy compression format。
此外,根据Adriaan's answer:
,我的代码非常紧凑function [] = thresholdImg(X)
A=imread('car_gray.jpg');
B = sum(A, 3) > X
figure,imshow(B);