Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中实现灰度图像的二值化_Matlab_Image Processing_Binary_Grayscale - Fatal编程技术网

如何在MATLAB中实现灰度图像的二值化

如何在MATLAB中实现灰度图像的二值化,matlab,image-processing,binary,grayscale,Matlab,Image Processing,Binary,Grayscale,我必须编写一个程序,将强度图像转换成黑白图像。我只是想从原始矩阵I中取一个值,如果它高于平均值,则使另一个数组中的对应单元格等于1,否则等于零: for x=1:X for y=1:Y if I(x,y)>mean(I(:)) bw(x,y)=1; elseif I(x,y)<mean(I(:)) bw(x,y)=0; end end end image(bw) 对于x=

我必须编写一个程序,将强度图像转换成黑白图像。我只是想从原始矩阵I中取一个值,如果它高于平均值,则使另一个数组中的对应单元格等于1,否则等于零:

for x=1:X
    for y=1:Y
        if I(x,y)>mean(I(:))
            bw(x,y)=1;
        elseif I(x,y)<mean(I(:))
            bw(x,y)=0;
        end
    end
end
image(bw)
对于x=1:x
对于y=1:y
如果I(x,y)>平均值(I(:)
bw(x,y)=1;
如果I(x,y)使用
imagesc(bw)
(而不是
images(bw)
)。自动缩放图像范围的

另外,请注意,您可以使用此矢量化、更高效的版本替换所有代码:

bw = double(I>mean(I(:)));
使用以下命令:

bw = im2bw(I, graythresh(I));
这里是文件

使用
imshow(I,[])
,不计算介于0和255之间的图像,而是计算介于
min(I(:)
max(I(:)

编辑

您可以通过任何其他级别更改
灰度阈值(I)
。您仍然可以使用图像的平均值。(在0和1之间进行规格化)


一个问题是,您一直在使用
mean
直到那时

您要做的是在循环之前执行以下操作:

我的平均数=平均数(I(:)

然后用
myMean
替换以下所有出现的
mean(I(:)


使用“跑步”意味着你现在肯定会放慢速度,但这不是它变为全黑的原因。

uint8意味着白色是255,而不是1。你的意思是什么<代码>I
未被覆盖。这当然是低效的,但它不是一个运行的手段<代码>平均值(I(:)是每个time@LuisMendo你说得对,那样的话,我的观点就不那么重要了。我已经编辑了我的答案。之前找到“平均值”使它更快。
maxI = max(I(:));
minI = min(I(:));

bw = im2bw(I,(maxI - mean(I(:)))/(maxI - minI));