2012-10-22 79 views
0

下一代码获得我照片(被称为:“full_img”)葡萄的图像并计算出葡萄的面积:matlab将两个不同的相机给我不同的结果?

RGB = imread(full_img); 
GRAY = rgb2gray(RGB); 

threshold = graythresh(GRAY); 
originalImage = im2bw(GRAY, threshold); 

originalImage = bwareaopen(originalImage,250); 
SE = strel('disk',10); 
IM2 = imclose(originalImage,SE); 
originalImage = IM2; 

labeledImage = bwlabel(originalImage, 8);  % Label each blob so we can make measurements of it 

blobMeasurements = regionprops(labeledImage, originalImage, 'all'); 
numberOfBlobs = length(blobMeasurements); 

pixperinch=get(0,'ScreenPixelsPerInch'); %# find resolution of your display 
dpix=blobMeasurements(numberOfBlobs).Area; %# calculate distance in pixels 
dinch=dpix/pixperinch;      %# convert to inches from pixels 
dcm=dinch*2.54;       %# convert to cm from inches 
blobArea = dcm;       % Get area. 

如果我与由不同相机在相同的条件拍摄相同的葡萄(从相同的距离和相同的闪电拍摄它),我会得到相同的结果? (如果我有一个5百万像素和12万像素的相机?)。

回答

1

不,它不会。你使用dpix/pixperinch从图像坐标转换到世界坐标。一般来说这是错误的。如果你知道pixperinch,它将只适用于特定的图像(以及单独的图像)。为了获得图像中物体的几何特征(例如长度,面积等),必须使用摄像机矩阵和反投影变换来反投影笛卡尔空间中的图像像素,以获得笛卡尔坐标(让我们一起校准相机的镜头失真,这是一个非线性问题)。然后,您可以执行计算。即使对于同一台相机,您的代码也无法使用。 有关更多信息,请参见this

+0

谢谢。因为相机更好,我应该得到更好的结果吗?或不确定? –

+0

1台摄像机获得的特定图像的结果几乎相同。我的问题是:如果我购买更新更好的相机,我会比第一台相机获得更好的效果吗? –

+0

Alon,我更仔细地看了你的代码。我看到您使用ScreenPixelsPerInch来获取每英寸的像素。这将返回您的显示器上的每英寸像素数**!换句话说,新闻部。它与blob的几何长度无关。如果你改变你的决议,这将改变。您的代码在查找blob的物理区域时不正确。 – Jorge

相关问题