保边滤波后的分段热像图
这个例子展示了如何处理热图像,演示了一个简单的分割。热图像是由热像相机获得的,它可以探测电磁波谱红外范围内的辐射。热像图捕捉到绝对零度以上所有物体发出的红外辐射。
将热图像读入工作区并使用谁
了解更多关于图像数据的信息。
我= imread (“hotcoffee.tif”);谁我
名称大小字节类属性I 240x320 307200单
计算数据所占的动态范围,可以看到图像所占的温度范围。这个图像中的像素值对应的是摄氏刻度上的实际温度。
range = [min(I(:)) max(I(:))]
范围=1x2单行向量22.4729 - 77.3727
显示热图像。因为热图像是一个动态范围在0到1之外的单精度图像,所以必须使用imshow
自动缩放功能显示图像。
figure imshow(I,[]) colormap(gca,hot) title(的“原始图像”)
对图像应用保边平滑,在保留图像细节的同时去除噪声。这是分割前的预处理步骤。使用imguidedfilter
函数在自我引导下执行平滑。的DegreeOfSmoothing
Name-value参数控制平滑的数量,并依赖于图像的范围。调整DegreeOfSmoothing
以适应热像图像的范围。显示过滤后的图像。
smoothValue = 0.01 * diff(范围)。^ 2;J = imguidedfilter(我“DegreeOfSmoothing”, smoothValue);figure imshow(J,[]) colormap(gca,hot) title(“引导过滤图像”)
确定阈值用于分割。图像有3个不同的区域-人,热的物体和背景-在强度(温度)上分离得很好。使用multithresh
为图像计算2级阈值。这使用Otsu的方法将图像划分为3个区域。
打= multithresh (J, 2)
打=1x2单行向量27.0018 - 47.8220
使用返回的值来阈值图像multithresh
。阈值为27摄氏度和48摄氏度。第一个阈值将背景强度与人分开,第二个阈值将人与热物体分开。对图像进行分割,并填充空洞。
L = imquantize (J,打);L = imfill (L);图imshow (label2rgb (L)标题(“来自3级大津的标签矩阵”)
在图像的前景区域周围画一个边界框,并将该区域的平均温度值放入框中。该示例假设最大的区域是背景。使用regionprops
函数获取关于分割图像中区域的信息。
道具= regionprops (L,我,“区域”,“边界框(“大小),“MeanIntensity”,“重心”]);%查找背景区域的索引。[~, idx] = max ([props.Area]);figure imshow(I,[]) colormap(gca,hot) title(“平均温度分割区域”)为n = 1:元素个数(道具)%如果区域不是背景如果n ~ = idx%在区域周围绘制边框矩形(“位置”、道具(n)。BoundingBox,“EdgeColor”,“c”)%绘制以摄氏度显示平均温度的文本T = num2str(道具(n) .MeanIntensity, 3) +“C \保监会”;文本(道具(n) .Centroid(1),道具(n) .Centroid (2), T,…“颜色”,“c”,“字形大小”, 12)结束结束
另请参阅
imquantize
|imguidedfilter
|multithresh
|imfill