⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geotmp.m

📁 This code can parse any image in matlab. Very elaborate code
💻 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 + -