matlab - 对图像应用阈值
问题描述
我正在尝试编写一个对灰度图像F
和阈值t
( 0 ≤ t ≤ 255
) 进行阈值处理的函数,例如r = 0
forr < t
和r = 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);
这应该对该图像进行阈值处理。但是,它并没有这样做。我究竟做错了什么?
解决方案
最好是使用逻辑索引:
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=1
or f=0
,这意味着您将整体设置f
为标量(一或零),这当然只是绘制黑色或白色方块。相反,使用逻辑矩阵作为矩阵本身的索引操作,然后将所需的值分配给每个true
条目,如上所示。
此外,function
定义要么放在它自己的文件中,要么放在脚本的底部。因此,要么将函数另存为imgThreshold.m
并将其余部分留给脚本,要么首先调用脚本并function f = imgThreshold(img, t)
在调用后放置等imshow
推荐阅读
- node.js - fetch post form with ref values
- django - 使用外键名称过滤 Django ViewSet
- javascript - 反应状态是否意味着在它定义的组件中使用?
- java - Optaplanner 如何使用相同的数据但不同的时间进行 2 种不同的求解
- html - 在 HTML 文件中呈现 GET 请求响应
- html - 我的导航栏的内容居中,但现在不是
- mysql - 聚合每个用户MYSQL的连接数
- python - 如何将多维数组传递给 pyopencl.algorithm.copy_if() -- PyOpenCL,
- vhdl - 赛灵思 ISE:
未声明 - unity3d - 如何在数组中找到 0,0,0 的 Vector3