首页 > 解决方案 > 对图像应用阈值

问题描述

我正在尝试编写一个对灰度图像F和阈值t( 0 ≤ t ≤ 255) 进行阈值处理的函数,例如r = 0forr < tr = 255其他。

我试图实现这一点,但imshow(r)没有产生输出。

function f = imgThreshold(img, t)

f = img;

if (f < t)
    f = 0;
else
    f = 1;
end

img = imread('https://i.stack.imgur.com/kP0u2.png');
t = 20; 
r = imgThreshold(img, t);
imshow(r); 

这应该对该图像进行阈值处理。但是,它并没有这样做。我究竟做错了什么?

标签: matlabimage-processing

解决方案


最好是使用逻辑索引

f(f<t)=0; % set all elements of f<t to 0
f(~(f==0))=1; % Set all elements where f is not 0 (i.e. the rest) to 1

f<t很好地产生了一个符合条件的逻辑矩阵,但随后您执行f=1or f=0,这意味着您将整体设置f标量(一或零),这当然只是绘制黑色或白色方块。相反,使用逻辑矩阵作为矩阵本身的索引操作,然后将所需的值分配给每个true条目,如上所示。

此外,function定义要么放在它自己的文件中,要么放在脚本的底部。因此,要么将函数另存为imgThreshold.m并将其余部分留给脚本,要么首先调用脚本并function f = imgThreshold(img, t)在调用后放置等imshow


推荐阅读