3D point cloud

1 回表示 (過去 30 日間)
Hitesh P
Hitesh P 2019 年 2 月 21 日
編集済み: John D'Errico 2019 年 2 月 21 日
I am trying to get a 3D point cloud using the following code:
output_dir = 'C:\Users\HITESH\Desktop\Matlab';
%%set up webcam
delete(imaqfind)
leftCam = imaq.VideoDevice('winvideo', 2, 'YUY2_640x480');
rightCam = imaq.VideoDevice('winvideo', 1, 'YUY2_640x480');
%%load stereo parameters if required
if ~exist('stereoParams', 'var')
load stereocalibration.m;
end
ax = axes;
maxDepth = 5;
clear maxdepth;
while true
imageLeft = step(rightCam);
imageRight = step(leftCam);
[J1, J2] = rectifyStereoImages(imageLeft, imageRight, stereoParams);
disp = disparity(rgb2gray(J1), rgb2gray(J2), 'DisparityRange', [0, 112]);
pointCloud = reconstructScene(disp, stereoParams) ./1000;
z = pointCloud(:,:,3);
z(z<0) = NaN;
z(z>maxDepth) = NaN;
pointCloud(:,:,3) = z;
if ~ishandle(ax)
break;
else
showPointCloud(pointCloud, J1, 'VerticalAxis', 'Y', 'VerticalAxisDir', 'Down', 'Parent', ax);
xlabel('X (m)');
ylabel('Y (m)');
zlabel('Z (m)');
xlim(ax, [-.8, .8]);
ylim(ax, [-.8, .8]);
zlim([ax, maxDepth]);
drawnow;
end
end
release(leftCam);
release(rightCam);
ERROR:
Error using matlab.graphics.axis.Axes/horzcat
Cannot convert double value 5 to a handle.
MATLAB R2015a

採用された回答

John D'Errico
John D'Errico 2019 年 2 月 21 日
編集済み: John D'Errico 2019 年 2 月 21 日
You need to learn to use the debugger. Or you need to learn to provide sufficient information, with the complete error message that arose, so what line failed. However, I will hazard a guess that what you did was make a syntax error.
You form the variable ax as:
ax = axes.
When you do that in MATLAB, for example...
plot(1:5)
>> ax = axes
ax =
Axes with properties:
XLim: [0 1]
YLim: [0 1]
XScale: 'linear'
YScale: 'linear'
GridLineStyle: '-'
Position: [0.1300 0.1100 0.7750 0.8150]
Units: 'normalized'
Show all properties
As you can see, the result is a handle to the axes in a figure.
Then later on, you did this:
xlim(ax, [-.8, .8]);
ylim(ax, [-.8, .8]);
zlim([ax, maxDepth]);
Do you see that in the calls to xlim and ylim, you used one form, yet when you called ylim, for some reason, you did something completely different?
In fact, inside the call to zlim, you tried to catenate the number 5 to a graphics handle?
maxDepth = 5;
Now, go back and READ THE ERROR MESSAGE YOU GOT. maxdepth is the number 5.

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangePoint Cloud Processing についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by