📄 geotmp.m
字号:
img = LHIimread(db,4,HOMEIMAGES);
geo = db(4).annotation.geometry;
handle=figure;maximize(handle); %maximize current display window
[nrow,ncol,channel] = size(img);
if (length(geo.VanishPoint) > 0 && length(geo.LongLine) > 0 ) %vanishing point0
%% Get boundary
numVpoint = length(geo.VanishPoint);
minX=1;minY=1;maxX=ncol;maxY=nrow;
for i=1:numVpoint
minX = min(minX,round(str2num(geo.VanishPoint(i).x)));
minY = min(minY,round(str2num(geo.VanishPoint(i).y)));
maxX = max(maxX,round(str2num(geo.VanishPoint(i).x)));
maxY = max(maxY,round(str2num(geo.VanishPoint(i).y)));
end
spaceImage = uint8(zeros(maxY-minY+1,maxX-minX+1,channel));
spaceImage((1-minY+1):(nrow-minY+1),(1-minX+1):(ncol-minX+1),:) = img;
imshow(spaceImage,[]); hold on;
vx=[]; vy=[];
% for i=1:numVpoint
% vx(i) = round(str2num(geo.VanishPoint(i).x))-minX+1;
% vy(i) = round(str2num(geo.VanishPoint(i).y))-minY+1;
% plot(vx(i),vy(i),'-o','MarkerFaceColor','g','MarkerEdgeColor','k',...
% 'MarkerSize',10);
% end
nLine = length(geo.LongLine);
XX={};YY={};
for i=1:nLine,
X = round(geo.LongLine(i).X) - minX;
Y = round(geo.LongLine(i).Y) - minY;
plot(X,Y,'-');
p1 = [X(1) Y(1) 0];
p2 = [X(2) Y(2) 0];
v1 = [vx(1) vy(1) 0];
v2 = [vx(2) vy(2) 0];
d1 = norm(cross(p2-p1,v1-p1))/norm(p2-p1);
d2 = norm(cross(p2-p1,v2-p1))/norm(p2-p1);
XX{i} = X; YY{i} = Y;
if (d1<d2)
plot([X vx(1)],[Y vy(1)],'-','LineWidth',5 ,'color', 'r');
else
plot([X vx(2)],[Y vy(2)],'-','LineWidth',5 ,'color', 'r');
end
end
[vx(1),vy(1)] = segintercept(XX{1},YY{1},XX{2},YY{2});
[vx(2),vy(2)] = segintercept(XX{3},YY{3},XX{4},YY{4});
plot((vx),(vy),'-','LineWidth',5 ,'color', 'g');
elseif (length(geo.LongLine) > 0) % horizontal line
else
disp('No geometry information');
image(img);axis off; axis equal;
end
%% find intercept point of two line segments
function [x,y] = segintercept(X1,Y1,X2,Y2)
k1 = (Y1(1)-Y1(2))/(X1(1)-X1(2));
x1 = X1(1);
y1 = Y1(1);
k2 = (Y2(1)-Y2(2))/(X2(1)-X2(2));
x2 = X2(1);
y2 = Y2(1);
x = (k1*x1-k2*x2+y2-y1)/(k1-k2);
y = (k1*k2*(x1-x2)+y2*k1-y1*k2)/(k1-k2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -