matlab将两个不同的相机给我不同的结果?

时间:2012-10-22 02:06:19

标签: matlab camera area

下一个代码获取我拍摄的葡萄图像(称为'full_img')并计算葡萄的面积:

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.

如果我用相同的条件用不同的相机拍摄相同的葡萄(从相同的距离和相同的闪电拍摄),我会得到相同的结果吗? (如果我有500万像素和12兆像素的摄像头怎么办?)。

1 个答案:

答案 0 :(得分:1)

不,它不会。您可以使用dpix / pixperinch从图像坐标转到世界坐标。一般来说这是错误的。如果您知道pixperinch,它将仅适用于特定图像(仅此一项)。为了获得图像中对象的几何特征(例如长度,区域等),必须使用Camera矩阵和逆投影变换对笛卡尔空间中的图像像素进行反投影,以获得笛卡尔坐标(让相机校准镜头失真,这是一个非线性问题)。然后,您可以执行计算。您的代码即使是相同的相机也无法使用。 有关详情,请参阅this