0

次のコードは、私が撮影したブドウの画像('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.

同じブドウを同じ条件で異なるカメラで撮影した場合(同じ距離と同じ稲妻から撮影した場合)、同じ結果が得られますか?(5メガピクセルと12メガピクセルのカメラがある場合はどうなりますか?)

4

1 に答える 1

1

いいえ、ありません。dpix / pixperinchを使用して、画像座標から世界座標に移動します。一般的に、これは間違っています。pixperinchを知っている場合は、特定の画像(およびそれだけ)に対してのみ機能します。画像内のオブジェクトの幾何学的特性(長さ、面積など)を取得するには、デカルト座標を取得するために、カメラマトリックスと逆射影変換を使用してデカルト空間の画像ピクセルを逆投影する必要があります(非線形の問題であるレンズの歪みについてカメラを調整します)。次に、計算を実行できます。同じカメラでもコードは機能しません。詳細については、こちらをご覧ください。

于 2012-10-22T02:23:09.307 に答える