【发布时间】:2014-11-29 00:27:54
【问题描述】:
在 MATLAB 中 cv2.threshold 和 cv2.inRange 的等价物是什么?
【问题讨论】:
标签: matlab opencv image-processing
在 MATLAB 中 cv2.threshold 和 cv2.inRange 的等价物是什么?
【问题讨论】:
标签: matlab opencv image-processing
让我们一次处理一个函数:
cv2.threshold最接近的等价物是使用im2bw。这会根据您指定的强度级别对图像进行阈值处理。但是,im2bw 与 cv2.threshold 的不同之处在于您无法指定输出阈值。 im2bw 假定它是二进制 1。因此,如果要将其转换为不同的值,则需要将图像转换为 uint8(或图像的任何数据类型),然后设置任何位置是 1 到您希望的任何值。因此,假设您的图像使用imread 加载并且图像被称为im,level 是您要设置阈值的阈值级别,maxval 是您希望每个阈值像素采用的最终输出值,你会这样做:
out = im2bw(im, level/255);
out = uint8(out);
out(out == 1) = maxval;
请务必注意,阈值水平在[0,1] 之间标准化。我除以 255,因为大多数图像是 uint8,因此除以 255 将得到范围为 [0,1]。 cv2.threshold 还可以通过 Otsu 进行阈值处理。您可以通过graythresh 在 MATLAB 中执行此操作。 graythresh 将提供[0,1] 之间的最佳阈值,您可以直接输入到im2bw 中。因此:
out = im2bw(im, graythresh(im));
out = uint8(out);
out(out == 1) = maxval;
cv2.inRangeMATLAB 本身不支持此功能。您需要做的是获取图像的每个平面(只有一个用于灰度,三个用于彩色),并单独检查是否有像素在有效范围内。如果有,您可以将其设置为逻辑true。因此,对于灰度图像,您可以执行以下操作:
minval = ...; %// Define minimum value here
maxval = ...; %// Define maximum value here
out = (im >= minval & im <= maxval);
对于彩色图像,您可以执行以下操作:
minval = ...; %// Define three element vector here for each colour plane i.e. [0 128 128];
maxval = ...; %// Define three element vector here for each colour plane i.e. [0 128 128];
out = true(size(im,1), size(im,2));
for p = 1 : 3
out = out & (im(:,:,p) >= minval(p) & im(:,:,p) <= maxval(p));
end
我们在这里做的是逐个平面检查每个颜色平面是否在minval 和maxval 中每个元素指定的范围内。一旦我们发现一个像素超出任何颜色平面的范围,我们就会将此位置设置为false。
祝你好运!
【讨论】: