文档帮助中心
采用Otsu方法的多级图像阈值
打= multithresh (A)
打= multithresh (N),
(打,度量)= multithresh (___)
例子
打= multithresh (一个)返回单个阈值打计算的图像一个利用大津的方法。您可以使用打的输入参数imquantize将图像转换为两级图像。
打= multithresh (一个)
打
一个
imquantize
打= multithresh (一个,N)返回打一个1 × n的向量N阈值使用Otsu的方法。您可以使用打的输入参数imquantize转换图像一个变成一个图像N + 1离散的水平。
打= multithresh (一个,N)
N
N + 1
[打,度规) = multithresh (___)返回度规,衡量所计算阈值的有效性。
[打,度规) = multithresh (___)
度规
全部折叠
读取图像并显示它。
我= imread (“coins.png”);imshow(我)
计算图像的单个阈值。
水平= multithresh(我);
将图像分割为两个区域使用imquantize,指定返回的阈值级别multithresh.
multithresh
seg_I = imquantize(我、水平);图imshow (seg_I, [])
我= imread (“circlesBrightDark.png”);imshow (I)轴从标题(原始图像的)
计算两个阈值水平。
打= multithresh(我,2);
将图像分割成三个层次使用imquantize.
seg_I = imquantize(我打);
将分割图像转换为彩色图像使用label2rgb和显示。
label2rgb
RGB = label2rgb (seg_I);图;imshow (RGB)轴从标题(RGB图像分割的)
读取真彩色(RGB)图像并显示它。
我= imread (“peppers.png”);imshow (I)轴从标题(“RGB图像”);
从整个RGB图像生成7级阈值。
threshRGB = multithresh (7);
为RGB图像的每个平面生成阈值。
threshForPlanes = 0(3、7);为i = 1:3 threshForPlanes(我:)= multithresh(我(:,:,i), 7);结束
用从整幅图像中计算出的阈值集对整幅图像进行处理。
value = [0 threshRGB(2:end) 255];quantRGB = imquantize(I, threshRGB, value);
使用从给定平面计算的阈值向量分别处理每个RGB平面。使用为该平面生成的阈值向量量化每个RGB平面。
quantPlane = 0 (size(I));为i = 1:3 value = [0 threshForPlanes(i,2:end) 255];quantPlane(:,:我)= imquantize(我(:,:,i), threshForPlanes(我:),值);结束quantPlane = uint8 (quantPlane);
显示两种分割图像并注意两种阈值方案的视觉差异。
imshowpair (quantRGB quantPlane,“蒙太奇”)轴从标题(“全RGB图像量化平面逐平面量化”)
为了比较结果,计算每个输出图像中唯一的RGB像素向量的数量。注意,逐平面阈值方案产生的颜色比全RGB图像方案多23%。
dim = size(quantRGB);qtrgbmx3 =重塑(qtrgb, prod(dim(1:2)), 3);quantPlanemx3 =重塑(quantPlane, prod(dim(1:2)), 3);colorsRGB =独特(quantRGBmx3,“行”);colorsPlane =独特(quantPlanemx3,“行”);disp ([“RGB图像中独特的颜色:”int2str(长度(colorsRGB))));
独特的颜色在RGB图像:188
disp ([“飞机上的独特色彩:”int2str(长度(colorsPlane))));
独特的色彩在飞机的图像:231
读取图像。
我= imread (“circlesBrightDark.png”);
在图像中找到所有唯一的灰度值。
uniqLevels =独特的(我(:));disp (['唯一级别的数量= 'int2str(长度(uniqLevels))));
独特关卡的数量= 148
在的单调递增值处计算一系列阈值N.
Nvals = [1 2 4 8];为i = 1:length(Nvals) [thresh, metric] = multithresh(i, Nvals(i));disp ([“N =”int2str(造船(我))' | metric = 'num2str(公制)]);结束
N = 1 | metric = 0.54767 N = 2 | metric = 0.98715 N = 4 | metric = 0.99648 N = 8 | metric = 0.99902
应用集合的8个阈值,以获得9级分割使用imquantize.
seg_Neq8 = imquantize(我打);uniqLevels = unique(seg_Neq8(:))
uniqLevels =9×11 2 3 4 5 6 7 8 9
使用seg_Neq8作为输入multithresh.集N等于8,比分割后的图像的层数少1。multithresh返回一个度规值为1。
seg_Neq8
[thresh, metric] = multithresh(seg_Neq8,8)
打=1×81.8784 2.7882 3.6667 4.5451 5.4549 6.3333 7.2118 8.1216
度量= 1
再次阈值图像,这次增加的值N1。这个值现在等于图像中的层数。请注意输入是如何退化的,因为图像中的级别数量对于请求阈值的数量来说太少了。因此,multithresh返回a度规值0。
[thresh, metric] = multithresh(seg_Neq8,9)
警告:没有解决方案存在,因为图像中的唯一级别的数量太少,无法找到9个阈值。返回任意选择的解。
打=1×91 2 3 4 5 6 7 8 9
度量= 0
要设置阈值的图像,指定为任意维度的数字数组。multithresh根据整个数组的聚合直方图查找阈值。multithresh将RGB图像视为一个三维数字阵列,并计算来自所有三个彩色平面的合并数据的阈值。
multithresh使用输入图像的范围一个,(最小((:))最大((:))),作为计算后续计算中使用的直方图的限制。multithresh忽略任何一个nan在计算。任何正和负分别计算在直方图的第一个和最后一个箱子中。
(最小((:))最大((:)))
nan
正
负
对于简并输入,其中唯一值的数目一个是小于还是等于N在美国,使用大津的方法没有可行的解决方案。对于这样的输入,返回值打包含的所有唯一值一个也可能是一些任意选择的额外值。
数据类型:单|双|int16|uint8|uint16
单
双
int16
uint8
uint16
1
阈值的数量,指定为正整数。为N > 2,multithresh采用基于搜索的Otsu准则优化来寻找阈值。基于搜索的优化只保证局部最优的结果。由于收敛到局部最优的概率随N,最好使用较小的值N,通常是N < 10.的最大允许值N是20。
N > 2
N < 10
数据类型:单|双|int8|int16|int32|int64|uint8|uint16|uint32|uint64
int8
int32
int64
uint32
uint64
用于量化图像的阈值集,返回为1乘n的数字向量,其数据类型与图像相同一个.
这些阈值与输入图像的范围相同一个,不像graythresh函数,返回范围为[0,1]的标准化阈值。
graythresh
阈值有效性的度量,返回为范围[0,1]内的一个数字。值越高,说明阈值在将输入图像分割成多个图像时效果越好N + 1基于大津的客观标准。对于简并输入,其中唯一值的数目一个是小于还是等于N,度规= 0。
数据类型:双
[1] Otsu, N.,“灰度直方图的阈值选择方法”,IEEE系统、人与控制论汇刊,第9卷第1期,1979年,第62-66页。
使用注意事项及限制:
multithresh金宝app支持C代码的生成(需要MATLAB®编码器™).请注意,如果您选择genericMATLAB主机目标平台,multithresh生成使用预编译的、特定于平台的共享库的代码。使用共享库可以保持性能优化,但限制了可以为其生成代码的目标平台。有关更多信息,请参见使用共享库生成代码.
MATLAB主机
输入参数N必须是编译时常量。
graythresh|im2bw|imquantize|rgb2ind
im2bw
rgb2ind
在您的系统中存在这个示例的修改版本。你想打开这个版本吗?
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
选择一个网站,在那里获得翻译的内容,并看到当地的活动和优惠。根据您的位置,我们建议您选择:.
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
与当地办事处联系