Add IPCV2 warping and classification
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 792 KiB |
|
After Width: | Height: | Size: 940 KiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 920 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 622 KiB |
|
After Width: | Height: | Size: 222 KiB |
@ -0,0 +1,280 @@
|
||||
<mxfile host="Electron" modified="2024-04-29T13:43:34.218Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.1.5 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="_r0HMs9nD7YSSHOj-esx" version="23.1.5" type="device">
|
||||
<diagram name="Pagina-1" id="2E39NDmfMYuv_2c8OxZy">
|
||||
<mxGraphModel dx="819" dy="478" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-1" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="712.5" y="400" width="100" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-2" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="710" y="396" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-3" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="707.5" y="495" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-4" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="807.5" y="395" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-5" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="808" y="495" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-7" value="" style="endArrow=none;dashed=1;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.583;exitY=-0.005;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-46" target="YHuVpkroIluG6QRTz7fR-6">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="765" y="450" as="sourcePoint" />
|
||||
<mxPoint x="815" y="400" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-8" value="" style="endArrow=none;dashed=1;html=1;rounded=0;entryX=-0.007;entryY=0.372;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryPerimeter=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-6" target="YHuVpkroIluG6QRTz7fR-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="795" y="410" as="sourcePoint" />
|
||||
<mxPoint x="795" y="436" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-9" value="<font face="Computer modern">∆<i>v</i></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="770" y="400" width="15" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-10" value="<font face="Computer modern">∆<i>u</i></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="712.5" y="437" width="60" height="9" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-11" value="<font face="Computer modern"><i>I</i><sub style="">1</sub>=<i>I</i>(<i>u</i><sub style="">1</sub><i>, v</i><sub style="">1</sub>)</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="682.5" y="380" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-12" value="<font face="Computer modern"><i>I</i><sub style="">2</sub>=<i>I</i>(<i>u</i><sub style="">2</sub><i>, v</i><sub style="">2</sub>)</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="780.5" y="380" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-13" value="<font face="Computer modern"><i>I</i><sub style="">4</sub>=<i>I</i>(<i>u</i><sub style="">4</sub><i>, v</i><sub style="">4</sub>)</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="780.5" y="505" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-14" value="<font face="Computer modern"><i>I</i><sub style="">3</sub>=<i>I</i>(<i>u</i><sub style="">3</sub><i>, v</i><sub style="">3</sub>)</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="505" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-16" value="<font face="Computer modern"><i>I</i>(</font>∆<font face="Computer modern"><i>u</i><i>,</i></font>∆<font face="Computer modern"><i>v</i>)</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="767.5" y="439" width="50" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-18" value="" style="endArrow=none;dashed=1;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.583;entryY=1.004;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-44" target="YHuVpkroIluG6QRTz7fR-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="785" y="470" as="sourcePoint" />
|
||||
<mxPoint x="745" y="510" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-6" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="765.5" y="432" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-20" value="" style="rounded=0;whiteSpace=wrap;html=1;fillColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="140" y="400" width="100" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-21" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="135" y="395" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-22" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="135" y="495" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-23" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="235.5" y="395" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-24" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="234" y="495" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-25" value="" style="endArrow=none;dashed=1;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.583;exitY=-0.005;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-20" target="YHuVpkroIluG6QRTz7fR-35">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="192.5" y="450" as="sourcePoint" />
|
||||
<mxPoint x="242.5" y="400" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-26" value="" style="endArrow=none;dashed=1;html=1;rounded=0;entryX=-0.007;entryY=0.372;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryPerimeter=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-35" target="YHuVpkroIluG6QRTz7fR-20">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="222.5" y="410" as="sourcePoint" />
|
||||
<mxPoint x="222.5" y="436" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-27" value="<font face="Computer modern">∆<i>v</i></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="401" width="15" height="39" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-28" value="<font face="Computer modern">∆<i>u</i></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="140" y="437" width="60" height="9" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-29" value="<font face="Computer modern"><i>I</i><sub style="">1</sub>=<i>I</i>(<i>u</i><sub style="">1</sub><i>, v</i><sub style="">1</sub>)</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="110" y="380" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-30" value="<font face="Computer modern"><i>I</i><sub style="">2</sub>=<i>I</i>(<i>u</i><sub style="">2</sub><i>, v</i><sub style="">2</sub>)</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="208" y="380" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-31" value="<font face="Computer modern"><i>I</i><sub style="">4</sub>=<i>I</i>(<i>u</i><sub style="">4</sub><i>, v</i><sub style="">4</sub>)</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="208" y="505" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-32" value="<font face="Computer modern"><i>I</i><sub style="">3</sub>=<i>I</i>(<i>u</i><sub style="">3</sub><i>, v</i><sub style="">3</sub>)</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="107.5" y="505" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-33" value="<font face="Computer modern"><i>I</i>(</font>∆<font face="Computer modern"><i>u</i><i>,</i></font>∆<font face="Computer modern"><i>v</i>)</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="194" y="440" width="50" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-35" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="193" y="432" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-37" value="<font face="Computer modern"><i>I</i><sub style=""><i>b</i></sub></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="738" y="505" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-38" value="<font face="Computer modern"><i>I</i><sub style=""><i>a</i></sub></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="738" y="380" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-39" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=1;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" target="YHuVpkroIluG6QRTz7fR-41">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="140" y="370" as="sourcePoint" />
|
||||
<mxPoint x="260" y="370" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-41" value="<font face="Computer modern">1</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="140" y="360" width="100" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-42" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-43">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="110" y="520" as="sourcePoint" />
|
||||
<mxPoint x="110" y="400" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-43" value="<font face="Computer modern">1</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="400" width="10" height="100" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-45" value="" style="endArrow=none;dashed=1;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.583;entryY=1.004;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-6" target="YHuVpkroIluG6QRTz7fR-44">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="785" y="450" as="sourcePoint" />
|
||||
<mxPoint x="785" y="520" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-44" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="765.5" y="495" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-47" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="372" y="476.5" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-48" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="493.5" y="476.5" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-49" value="<font face="Computer modern"><i>I</i><sub style="">1</sub></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="350" y="434" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-50" value="<font face="Computer modern"><i>I</i><sub style="">2</sub></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="478" y="406" width="41" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-51" value="<font face="Computer modern"><i>I</i><sub style=""><i>a</i></sub></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="416" y="414.5" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-52" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="443.5" y="476.5" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-53" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-47" target="YHuVpkroIluG6QRTz7fR-48">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="307" y="461.5" as="sourcePoint" />
|
||||
<mxPoint x="357" y="411.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-54" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-47">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="378" y="482.5" as="sourcePoint" />
|
||||
<mxPoint x="377" y="451.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-55" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-48">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="417" y="461.5" as="sourcePoint" />
|
||||
<mxPoint x="498" y="421.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-56" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="377" y="451.5" as="sourcePoint" />
|
||||
<mxPoint x="497" y="421.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-57" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="YHuVpkroIluG6QRTz7fR-52">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="448" y="434.5" as="sourcePoint" />
|
||||
<mxPoint x="487" y="441.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-59" value="<font face="Computer modern">∆<i>u</i></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="378" y="471.5" width="70" height="9" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-60" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="378" y="496.5" as="sourcePoint" />
|
||||
<mxPoint x="500" y="496.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-61" value="<font face="Computer modern">1</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="378" y="497.5" width="120" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-106" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="520" y="476.5" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-107" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="641.5" y="476.5" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-108" value="<font face="Computer modern"><i>I</i><sub style="">3</sub></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="499" y="419" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-109" value="<font face="Computer modern"><i>I</i><sub style="">4</sub></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="626" y="445" width="41" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-110" value="<font face="Computer modern"><i>I</i><sub style=""><i>b</i></sub></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="564" y="434" width="65" height="15" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-111" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="591.5" y="476.5" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-112" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-106" target="YHuVpkroIluG6QRTz7fR-107">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="455" y="461.5" as="sourcePoint" />
|
||||
<mxPoint x="505" y="411.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-113" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-106">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="526" y="482.5" as="sourcePoint" />
|
||||
<mxPoint x="525" y="434" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-114" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-107">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="565" y="461.5" as="sourcePoint" />
|
||||
<mxPoint x="646" y="463" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-115" value="" style="endArrow=none;dashed=1;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="525" y="434" as="sourcePoint" />
|
||||
<mxPoint x="645" y="463" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-116" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="YHuVpkroIluG6QRTz7fR-111">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="596" y="451" as="sourcePoint" />
|
||||
<mxPoint x="635" y="441.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-117" value="<font face="Computer modern">∆<i>u</i></font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="526" y="471.5" width="70" height="9" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-118" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="526" y="496.5" as="sourcePoint" />
|
||||
<mxPoint x="648" y="496.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-119" value="<font face="Computer modern">1</font>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="526" y="497.5" width="120" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-120" value="" style="endArrow=none;dashed=1;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.583;exitY=-0.005;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="YHuVpkroIluG6QRTz7fR-1" target="YHuVpkroIluG6QRTz7fR-46">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="770.5" y="400" as="sourcePoint" />
|
||||
<mxPoint x="770.5" y="432" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="YHuVpkroIluG6QRTz7fR-46" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;" vertex="1" parent="1">
|
||||
<mxGeometry x="765.5" y="395" width="10" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@ -9,5 +9,6 @@
|
||||
\makenotesfront
|
||||
|
||||
\input{./sections/_image_formation.tex}
|
||||
\input{./sections/_classification.tex}
|
||||
|
||||
\end{document}
|
||||
@ -0,0 +1,105 @@
|
||||
\chapter{Image classification}
|
||||
|
||||
|
||||
\section{Supervised datasets}
|
||||
|
||||
\begin{description}
|
||||
\item[Dataset] \marginnote{Dataset}
|
||||
Given a set of labeled data, it can be split into:
|
||||
\begin{descriptionlist}
|
||||
\item[Train set] $D^\text{train} = \{ (\text{x}_\text{train}^{(i)}, y_\text{train}^{(i)}) \mid i = 1, \dots, N \}$.
|
||||
\item[Test set] $D^\text{test} = \{ (\text{x}_\text{test}^{(i)}, y_\text{test}^{(i)}) \mid i = 1, \dots, M \}$.
|
||||
\end{descriptionlist}
|
||||
|
||||
It is assumed that the two sets contain i.i.d. samples drawn from the same unknown distribution.
|
||||
\end{description}
|
||||
|
||||
|
||||
\subsection{Modified NIST (MNIST)}
|
||||
|
||||
\begin{minipage}{0.45\linewidth}
|
||||
\centering
|
||||
\includegraphics[width=0.9\linewidth]{./img/mnist.png}
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.5\linewidth}
|
||||
\begin{descriptionlist}
|
||||
\item[Content] Handwritten digits from 0 to 9.
|
||||
\item[Number of classes] 10.
|
||||
\item[Train set size] 50k.
|
||||
\item[Test set size] 10k.
|
||||
\item[Image format] $28 \times 28$ grayscale.
|
||||
\end{descriptionlist}
|
||||
\end{minipage}
|
||||
|
||||
|
||||
\subsection{CIFAR10}
|
||||
|
||||
\begin{minipage}{0.45\linewidth}
|
||||
\centering
|
||||
\includegraphics[width=0.9\linewidth]{./img/cifar10.png}
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.5\linewidth}
|
||||
\begin{descriptionlist}
|
||||
\item[Content] Objects of various categories.
|
||||
\item[Number of classes] 10.
|
||||
\item[Train set size] 50k.
|
||||
\item[Test set size] 10k.
|
||||
\item[Image size] $32 \times 32$ RGB.
|
||||
\end{descriptionlist}
|
||||
\end{minipage}
|
||||
|
||||
|
||||
\subsection{CIFAR100}
|
||||
|
||||
\begin{minipage}{0.45\linewidth}
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{./img/cifar100.png}
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.5\linewidth}
|
||||
\begin{descriptionlist}
|
||||
\item[Content] Objects of various categories.
|
||||
\item[Number of classes] 100 (20 super-classed with 5 sub-classes).
|
||||
\item[Train set size] 50k.
|
||||
\item[Test set size] 10k.
|
||||
\item[Image size] $32 \times 32$ RGB.
|
||||
\end{descriptionlist}
|
||||
\end{minipage}
|
||||
|
||||
|
||||
\subsection{ImageNet 21k}
|
||||
|
||||
\begin{descriptionlist}
|
||||
\item[Content] Objects of various categories.
|
||||
\item[Number of classes] 21k synsets from WordNet organized hierarchically.
|
||||
\item[Dataset size] 14 millions.
|
||||
\item[Image size] Variable resolution RGB. Average size of $400 \times 350$.
|
||||
\end{descriptionlist}
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.85\linewidth]{./img/imagenet21k.png}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\subsection{ImageNet 1k}
|
||||
|
||||
\begin{minipage}{0.45\linewidth}
|
||||
\centering
|
||||
\includegraphics[width=\linewidth]{./img/imagenet1k.png}
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.5\linewidth}
|
||||
\begin{descriptionlist}
|
||||
\item[Content] Objects of various categories.
|
||||
\item[Number of classes] 1000.
|
||||
\item[Train set size] $1.3$ millions.
|
||||
\item[Validation set size] 50k.
|
||||
\item[Test set size] 100k.
|
||||
\item[Image size] Variable resolution RGB. Often resized to $256 \times 256$.
|
||||
\end{descriptionlist}
|
||||
\end{minipage}
|
||||
|
||||
\begin{remark}
|
||||
Performance is usually measured as top-5 accuracy as making a single prediction might be ambiguous due to the fact that the images can contain multiple objects.
|
||||
\end{remark}
|
||||
|
||||
|
||||
@ -477,7 +477,7 @@ Therefore, the complete workflow for image formation becomes the following:
|
||||
\end{description}
|
||||
|
||||
\item[Initial homographies guess]
|
||||
For each image $i$, compute an initial guess of its homography $H_i$.
|
||||
For each image $i$, compute an initial guess of its homography $\matr{H}_i$.
|
||||
|
||||
Due to the choice of the $z$-axis position, the perspective projection matrix and the WRF points can be simplified:
|
||||
\[
|
||||
@ -842,6 +842,185 @@ Starting from the output image coordinates, use the inverse of the warping funct
|
||||
The computed input coordinates might be continuous. Possible discretization strategies are:
|
||||
\begin{itemize}
|
||||
\item Truncation.
|
||||
\item Nearest neighbor (i.e. rounding).
|
||||
\item Interpolation between the 4 closest points (e.g. bilinear, bicubic, \dots).
|
||||
\end{itemize}
|
||||
\item Nearest neighbor.
|
||||
\item Interpolation between the 4 closest pixels of the continuous point (e.g. bilinear, bicubic, \dots).
|
||||
\end{itemize}
|
||||
|
||||
|
||||
\begin{description}
|
||||
\item[Bilinear interpolation] \marginnote{Bilinear interpolation}
|
||||
Given a continuous coordinate $(u, v)$ and
|
||||
its closest four pixels $(u_1, v_1), \dots, (u_4, v_4)$ with intensities denoted for simplicity as $I_i = I(u_i, v_i)$,
|
||||
bilinear interpolation works as follows:
|
||||
\begin{enumerate}
|
||||
\item Compute the offset of $(u,v)$ w.r.t. the top-left pixel:
|
||||
\[ \Delta u = u - u_1 \hspace{2em} \Delta v = v - v_1 \]
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.25\linewidth]{./img/_warping_bilinear1.pdf}
|
||||
\end{figure}
|
||||
|
||||
\item Interpolate a point $(u_a, v_a)$ between $(u_1, v_1)$ and $(u_2, v_2)$ in such a way that it is perpendicular to $(u,v)$.
|
||||
Do the same for a point $(u_b, v_b)$ between $(u_3, v_3)$ and $(u_4, v_4)$.
|
||||
The intensities of the new points are computed by interpolating the intensities of their extrema:
|
||||
\[ I_a = I_1 + (I_2 - I_1) \Delta u \hspace{2em} I_b = I_3 + (I_4 - I_3) \Delta u \]
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{./img/_warping_bilinear2.pdf}
|
||||
\caption{In the figure, it is assumed that $I_1 < I_2$ and $I_3 > I_4$}
|
||||
\end{figure}
|
||||
|
||||
\item The intensity $I(\Delta u, \Delta v) = I'(u', v')$ in the warped image is obtained by interpolating the intensities of $I_a$ and $I_b$:
|
||||
\[
|
||||
\begin{split}
|
||||
I'(u', v') &= I_a + (I_b - I_a) \Delta v \\
|
||||
&= \Big( I_1 + (I_2 - I_1) \Delta u \Big) + \Big( \big( I_3 + (I_4 - I_3) \Delta u \big) - \big( I_1 + (I_2 - I_1) \Delta u \big) \Big) \Delta v \\
|
||||
&= (1-\Delta u)(1 - \Delta v) I_1 + \Delta u (1-\Delta v) I_2 + (1-\Delta u) \Delta v I_3 + \Delta u \Delta v I_4
|
||||
\end{split}
|
||||
\]
|
||||
\end{enumerate}
|
||||
|
||||
\begin{remark}[Zoom]
|
||||
Zooming using nearest-neighbor produces sharper edges while bilinear interpolation results in smoother images.
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.5\linewidth]{./img/warp_zoom.png}
|
||||
\end{figure}
|
||||
\end{remark}
|
||||
|
||||
\begin{remark}
|
||||
Nearest-neighbor is suited to preserve transition (e.g. zoom a binary mask while maintaining the 0s and 1s).
|
||||
\end{remark}
|
||||
\end{description}
|
||||
|
||||
|
||||
\subsection{Undistort warping}
|
||||
|
||||
Once a camera has been calibrated, the lens distortion parameters can be used to obtain the undistorted image through backward warping.
|
||||
\[
|
||||
\begin{split}
|
||||
w_u &= u_\text{undist} + (k_1 r^2 + k_2 r^4)(u_\text{undist} - u_0) \\
|
||||
w_v &= v_\text{undist} + (k_1 r^2 + k_2 r^4)(v_\text{undist} - v_0) \\
|
||||
\end{split}
|
||||
\]
|
||||
\[
|
||||
I'(u_\text{undist}, v_\text{undist}) = I\big( w^{-1}_u(u_\text{undist}, v_\text{undist}), w^{-1}_v(u_\text{undist}, v_\text{undist}) \big)
|
||||
\]
|
||||
|
||||
Undistorted images enjoy some properties:
|
||||
\begin{descriptionlist}
|
||||
\item[Planar warping] \marginnote{Planar warping}
|
||||
Any two images without lens distortion of a planar world scene ($z_W=0$) are related by a homography.
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.5\linewidth]{./img/_warp_application1.pdf}
|
||||
\end{figure}
|
||||
Given two images containing the same world point, their image points (in projective space) are respectively given by a homography $\matr{H}_1$ and $\matr{H}_2$
|
||||
(note that with $z_w=0$, the PPM is a $3 \times 3$ matrix and therefore a homography):\\[-0.5em]
|
||||
\begin{minipage}{0.5\linewidth}
|
||||
\[
|
||||
\begin{split}
|
||||
\tilde{\vec{m}}_1 &= \matr{H}_1 \tilde{\vec{M}}_W \\
|
||||
\tilde{\vec{m}}_1 &= \matr{H}_1 \matr{H}_2^{-1} \tilde{\vec{m}}_2 \\
|
||||
\end{split}
|
||||
\]
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.5\linewidth}
|
||||
\[
|
||||
\begin{split}
|
||||
\tilde{\vec{m}}_2 &= \matr{H}_2 \tilde{\vec{M}}_W \\
|
||||
\tilde{\vec{m}}_2 &= \matr{H}_2 \matr{H}_1^{-1} \tilde{\vec{m}}_1 \\
|
||||
\end{split}
|
||||
\]
|
||||
\end{minipage}\\[0.5em]
|
||||
Then, $\matr{H}_1 \matr{H}_2^{-1} = \matr{H}_{21} = \matr{H}_{12}^{-1}$ is the homography that relates $\tilde{\vec{m}}_2$ to $\tilde{\vec{m}}_1$
|
||||
and $\matr{H}_2 \matr{H}_1^{-1} = \matr{H}_{12} = \matr{H}_{21}^{-1}$ relates $\tilde{\vec{m}}_1$ to $\tilde{\vec{m}}_2$.
|
||||
|
||||
\begin{remark}
|
||||
Only ground points on the planar section of the image can be correctly warped.
|
||||
\end{remark}
|
||||
|
||||
\begin{example}[Inverse Perspective Mapping]
|
||||
In autonomous driving, it is usually useful to have a bird-eye view of the road.
|
||||
|
||||
In a controlled environment, a calibrated camera can be mounted on a car to take a picture of the road in front of it.
|
||||
Then, a (virtual) image of the road viewed from above is generated.
|
||||
By finding the homography that relates the two images, it is possible to produce a bird-eye view of the road from the camera mounted on the vehicle.
|
||||
|
||||
Note that the homography needs to be computed only once.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.7\linewidth]{./img/inverse_perspective_mapping.png}
|
||||
\end{figure}
|
||||
\end{example}
|
||||
|
||||
\item[Rotation warping] \marginnote{Rotation warping}
|
||||
Any two images without lens distortion taken by rotating the camera about its optical center are related by a homography.
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.35\linewidth]{./img/_warp_application2.pdf}
|
||||
\end{figure}
|
||||
It is assumed that the first image is taken in such a way that the WRF and CRF are the same (i.e. no extrinsic parameters).
|
||||
Then, a second image is taken by rotating the camera about its optical center.
|
||||
It holds that:\\[-0.5em]
|
||||
\begin{minipage}{0.5\linewidth}
|
||||
\[
|
||||
\begin{split}
|
||||
\tilde{\vec{m}}_1 &= \matr{A} [\matr{I} | \nullvec] \tilde{\vec{M}}_W = \matr{A}\tilde{\vec{M}}_W \\
|
||||
\tilde{\vec{m}}_1 &= \matr{A}\matr{R}^{-1}\matr{A}^{-1} \tilde{\vec{m}}_2 \\
|
||||
\end{split}
|
||||
\]
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.5\linewidth}
|
||||
\[
|
||||
\begin{split}
|
||||
\tilde{\vec{m}}_2 &= \matr{A} [\matr{R} | \nullvec] \tilde{\vec{M}}_W = \matr{A}\matr{R}\tilde{\vec{M}}_W \\
|
||||
\tilde{\vec{m}}_2 &= \matr{A}\matr{R}\matr{A}^{-1} \tilde{\vec{m}}_1 \\
|
||||
\end{split}
|
||||
\]
|
||||
\end{minipage}\\[0.5em]
|
||||
Then, $\matr{A}\matr{R}^{-1}\matr{A}^{-1} = \matr{H}_{21} = \matr{H}_{12}^{-1}$ is the homography that relates $\tilde{\vec{m}}_2$ to $\tilde{\vec{m}}_1$
|
||||
and $\matr{A}\matr{R}\matr{A}^{-1} = \matr{H}_{12} = \matr{H}_{21}^{-1}$ relates $\tilde{\vec{m}}_1$ to $\tilde{\vec{m}}_2$.
|
||||
|
||||
\begin{remark}
|
||||
Any point of the image can be correctly warped.
|
||||
\end{remark}
|
||||
|
||||
\begin{example}[Compensate pitch or yaw]
|
||||
In autonomous driving, cameras should be ideally mounted with the optical axis parallel to the road plane and aligned with the direction of motion.
|
||||
It is usually very difficult to obtain perfect alignment physically
|
||||
but a calibrated camera can help to compensate pitch (i.e. rotation around the $x$-axis)
|
||||
and yaw (i.e. rotation around the $y$-axis) by estimating the vanishing point of the lane lines.
|
||||
|
||||
\begin{figure}[H]
|
||||
\centering
|
||||
\includegraphics[width=0.85\linewidth]{./img/pitch_yaw_compensation.png}
|
||||
\end{figure}
|
||||
|
||||
It is assumed that the vehicle is driving straight w.r.t. the lines and
|
||||
that the WRF is attached to the vehicle in such a way that the $z$-axis is pointing in front of the vehicle.
|
||||
It holds that any line parallel to the $z$-axis has direction $\begin{bmatrix} 0 & 0 & 1 \end{bmatrix}^T$
|
||||
and their point at infinity in perspective space is at $\begin{bmatrix} 0 & 0 & 1 & 0 \end{bmatrix}^T$.
|
||||
|
||||
The coordinates of the vanishing point are then obtained as:
|
||||
\[
|
||||
\vec{m}_\infty \equiv \matr{A}[\matr{R} | 0] \begin{bmatrix} 0 \\ 0 \\ 1 \\ 0 \end{bmatrix}
|
||||
\equiv \matr{A}\vec{r}_3
|
||||
\equiv \matr{A} \begin{bmatrix} 0 \\ \sin\beta \\ \cos\beta \end{bmatrix}
|
||||
\]
|
||||
where $\vec{r}_3$ is the third column of the rotation matrix $\matr{R}_\text{pitch} = \begin{bmatrix}
|
||||
1 & 0 & 0 \\ 0 & \cos\beta & \sin\beta \\ 0 & -\sin\beta & \cos\beta
|
||||
\end{bmatrix}$ that applies a rotation of $\beta$ degree around the $x$-axis.
|
||||
|
||||
By computing the point at infinity, it is possible to estimate $\vec{r}_3 = \frac{\matr{A}^{-1} \vec{m}_\infty}{\Vert \matr{A}^{-1} \vec{m}_\infty \Vert_2}$
|
||||
(as $\vec{r}_3$ is a unit vector) and from it we can find the entire rotation matrix $\matr{R}_\text{pitch}$.
|
||||
|
||||
Finally, the homography $\matr{A}\matr{R}_\text{pitch}\matr{A}^{-1}$ relates the pitched image to the ideal image.
|
||||
|
||||
\begin{remark}
|
||||
The same procedure can be done for the yaw.
|
||||
\end{remark}
|
||||
\end{example}
|
||||
\end{descriptionlist}
|
||||