我有一个二进制图像,其中包含不同大小的BLOB。
Input Image
我可以计算使用nnz()
其计算白色像素的数目的区域,。如何计算二进制图像中厘米,毫米的BLOB大小?
% my code
C = imread('InputImage');
C = im2bw(C);
carea = nnz(C);
disp(carea);
%
但我想知道它们的厘米或毫米值。
可能吗?
怎么样?
我有一个二进制图像,其中包含不同大小的BLOB。
Input Image
我可以计算使用nnz()
其计算白色像素的数目的区域,。如何计算二进制图像中厘米,毫米的BLOB大小?
% my code
C = imread('InputImage');
C = im2bw(C);
carea = nnz(C);
disp(carea);
%
但我想知道它们的厘米或毫米值。
可能吗?
怎么样?
有一种可能的方式来估计/计算图像中物体的大小。
如果数字图像本身是您拥有的唯一信息,那么您无法知道。否则,你需要得到“空间校准系数”,不久,你像一个具有相同距离的对象相机与已知的规模和得到每厘米的像素,长的答案,可以发现:
https://www.mathworks.com/matlabcentral/answers/56087-how-can-i-find-the-spatial-calibration-factor
常,这样的任务需要对象的分割和本地化,但是,我认为,在你的问题中,图像总是二进制的,并且只有一个白色对象。现在,您还需要知道,测量的精度将受到离散化误差的限制。例如,如果拍摄10.49米至10.49平方米的照片,拍摄对象的照片,分辨率非常低(例如100像素,10像素),则最多可达0.5米的误差,您可能会错过每2个维度49厘米,并具有二进制数字图像,您可以做的很多事情来摆脱这个错误。
我不知道图像的来源是什么,但PNG文件具有编码分辨率的标题字段。您可以使用功能imfinfo
来获取此信息。对于你的形象,这是我得到:
>> info = imfinfo('czYGP.png')
info =
struct with fields:
Filename: 'czYGP.png'
FileModDate: '08-May-2017 15:00:13'
FileSize: 1275
Format: 'png'
FormatVersion: []
Width: 266
Height: 280
BitDepth: 24
ColorType: 'truecolor'
FormatSignature: [137 80 78 71 13 10 26 10]
Colormap: []
Histogram: []
InterlaceType: 'none'
Transparency: 'none'
SimpleTransparencyData: []
BackgroundColor: []
RenderingIntent: 'perceptual'
Chromaticities: [0.3127 0.3290 0.6400 0.3300 0.3000 0.6000 0.1500 0.0600]
Gamma: 0.4545
XResolution: 3779
YResolution: 3779
ResolutionUnit: 'meter'
XOffset: []
YOffset: []
OffsetUnit: []
SignificantBits: []
ImageModTime: []
Title: []
Author: []
Description: []
Copyright: []
CreationTime: []
Software: []
Disclaimer: []
Warning: []
Source: []
Comment: []
OtherText: []
这里有趣的领域是'XResolution'
和'YResolution'
,无论是在每'ResolutionUnit'
像素,这是'meter'
。使用这个信息,我们可以计算像素大小为你的形象:
pixelSize = 100./[info.XResolution info.YResolution]; % In cm/pixel
pixelSize = 1000./[info.XResolution info.YResolution]; % In mm/pixel
现在,所有你需要做的就是乘任何面积测量您的像素面积得到的,就像这样:
carea = nnz(C)*prod(pixelSize);
注意:当然,这一切都假设此头信息被设置为适当的值,而不仅仅是默认值或任意设置或修改任何点。这就是为什么图像的来源很重要,并且它是值得信赖的(就像它来自某些医学成像设备或软件)。
简单地说,根据参考大小的网格校准输入并使用这种px大小的直接转换为[mm^2]。 – user3666197
对不起。无法理解。有没有任何代码?或者我应该手动测量它? @ user3666197 –
您需要知道物体平面中像素的大小。获得该尺寸的最简单方法是捕获已知尺寸的东西,然后计算像素以获得转换因子...... – Piglet