convert pdf to tiff using ghostscript c# : Add signature image to pdf acrobat SDK Library service wpf asp.net azure dnn ProgrammingComputerVision_CCdraft6-part1306

Figure 2.6: An example of detecting and matching SIFT features between two images.
2.2. SIFT - Scale-Invariant Feature Transform
61
Add signature image to pdf acrobat - C# PDF File Permission Library: add, remove, update PDF file permission in C#.net, ASP.NET, MVC, WPF
Tell C# users how to set PDF file permissions, like printing, copying, modifying, extracting, annotating, form filling, etc
add signature to pdf; add signature to pdf in preview
Add signature image to pdf acrobat - VB.NET PDF File Permission Library: add, remove, update PDF file permission in vb.net, ASP.NET, MVC, WPF
VB.NET Tutorial for How to Set PDF File Access Permissions Using XDoc.PDF for .NET
adding signature to pdf form; add signature block to pdf
(a)
(b)
Figure 2.7: An example of matching SIFT features between two images. (a) matches
from features in the left image without using the two-sided match function (b) the
remaining matches after using the two-sided version.
62
2.2. SIFT - Scale-Invariant Feature Transform
.NET PDF Document Viewing, Annotation, Conversion & Processing
Convert image files to PDF. File & Page Process. Allow to create digital signature. Easy to set PDF file permission. Add, insert PDF native annotations to PDF file
create signature from pdf; create pdf stamp signature
BMP to PDF Converter | Convert Bitmap to PDF, Convert PDF to BMP
Also designed to be used add-on for .NET Image SDK, RasterEdge Bitmap to PDF Converter can Powerful image converter for Bitmap and PDF files; No need for
pdf signature field; create signature field in pdf
ones and apply local descriptors to examples such as automatic panorama creation,
camera pose estimation, and 3D structure computation.
2.3 Matching Geotagged Images
Let’s end this chapter by looking at an example application of using local descriptors
for matching images with geotags. Geotagged images are images with GPS coordi-
nates either added manually by the photographer or automatically by the camera.
Downloading geotagged images from Panoramio
One source of geotagged images is the photo-sharing service Panoramio (http://www.
panoramio.com/), owned by Google. Like many web services, Panoramio has an API
to access content programmatically. Their API is simple and straight-forward and is
described at http://www.panoramio.com/api/. By making a HTTP GET call to a url
like this
http://www.panoramio.com/map/get
_
panoramas.php?order=popularity&set=public&
from=0&to=20&minx=-180&miny=-90&maxx=180&maxy=90&size=medium
where minx, miny, maxx, maxy define the geographic area to select photos from (min-
imum longitude, latitude, maximum longitude and latitude, respectively). You will get
the response in easy-to-parse JSON format. JSONis a common format for data transfer
between web services and is more lightweight than XML and other alternatives. You
can read more about JSON at http://en.wikipedia.org/wiki/JSON.
An interesting location with two distinct views is the White house in Washington
D.C. which is usually photographed from Pennsylvania Avenue from the south side or
from the north. The coordinates (latitude, longitude) are:
lt=38.897661
ln=-77.036564
To convert to the format needed for the API call, subtract and add a number from
these coordinates to get all images within a square centered around the White house.
The call
http://www.panoramio.com/map/get
_
panoramas.php?order=popularity&set=public&
from=0&to=20&minx=-77.037564&miny=38.896662&maxx=-77.035564&maxy=38.898662&size=medium
returns the first 20 images within the coordinate bounds (
±0.001
), ordered according
to popularity. The response looks something like this
2.3. Matching Geotagged Images
63
JPEG to PDF Converter | Convert JPEG to PDF, Convert PDF to JPEG
It can be used standalone. JPEG to PDF Converter is able to convert image files to PDF directly without the software Adobe Acrobat Reader for conversion.
add signature to preview pdf; export pdf sign in
PDF to WORD Converter | Convert PDF to Word, Convert Word to PDF
out transformation between different kinds of image files and Word Converter has accurate output, and PDF to Word need the support of Adobe Acrobat & Microsoft
create pdf signature field; adding signature to pdf in preview
{ "count": 349,
"photos": [{"photo
_
id": 7715073, "photo
_
title": "White House", "photo
_
url":
"http://www.panoramio.com/photo/7715073", "photo
_
file
_
url":
"http://mw2.google.com/mw-panoramio/photos/medium/7715073.jpg", "longitude":
-77.036583, "latitude": 38.897488, "width": 500, "height": 375, "upload
_
date":
"10 February 2008", "owner
_
id": 1213603, "owner
_
name": "
***
", "owner
_
url":
"http://www.panoramio.com/user/1213603"}
,
{"photo
_
id": 1303971, "photo
_
title": "ÃA˛Ãt’Îl’Ã
´
CÃ˛EÂt’Ã
´
LÃöâL’ˇeÃ
´
´
´
L
¯
d", "photo
_
url":
"http://www.panoramio.com/photo/1303971", "photo
_
file
_
url":
"http://mw2.google.com/mw-panoramio/photos/medium/1303971.jpg", "longitude":
-77.036353, "latitude": 38.897471, "width": 500, "height": 336, "upload
_
date":
"13 March 2007", "owner
_
id": 195000, "owner
_
name": "
***
", "owner
_
url":
"http://www.panoramio.com/user/195000"}
...
...
]}
To parse this JSON response we can use the
simplejson
package. Simplejson is avail-
able at http://github.com/simplejson/simplejson and there is online documenta-
tion available on the project page.
If you are running Python 2.6 or later there is no need to use
simplejson
as there
is a JSON library included with these later versions of Python. To use the built in one,
just import like this
import json
If you want to use
simplejson
where available (it is faster and could contain newer
features than the built in one) a good idea is to import with a fallback, like this
try: import simplejson as json
except ImportError: import json
The following code will use the
urllib
package that comes with Python to handle
the requests and then parse the result using
simplejson
.
import os
import urllib, urlparse
import simplejson as s json
# query for images
url ’http://www.panoramio.com/map/get
_
panoramas.php?order=popularity&\
set=public&from=0&to=20&minx=-77.037564&miny=38.896662&\
maxx=-77.035564&maxy=38.898662&size=medium’
= urllib.urlopen(url)
# get the urls of individual images from JSON
= json.loads(c.read())
imurls = []
for im in j[’photos’]:
64
2.3.Matching Geotagged Images
GIF to PDF Converter | Convert GIF to PDF, Convert PDF to GIF
use of external applications & Adobe Acrobat Reader. This GIF to PDF Converter provided by RasterEdge is Features and Benefits. Powerful image converter for GIF
pdf signatures; pdf signature stamp
DICOM to PDF Converter | Convert DICOM to PDF, Convert PDF to
Different from other image converters, users do not need to load Adobe Acrobat or any other print drivers when they use DICOM to PDF Converter.
pdf will signature; adding a signature to a pdf
Figure 2.8: Images taken at the same geographic location (square region centered
around the White house) downloaded from panoramio.com.
imurls.append(im[photo
_
file
_
url’])
# download images
for url in imurls:
image = urllib.URLopener()
image.retrieve(url, os.path.basename(urlparse.urlparse(url).path))
print downloading:, url
As you can easily see by looking at the JSON output, it is the "photo_file_url" field we
are after. Running the code above, you should see something like this in your console.
downloading: http://mw2.google.com/mw-panoramio/photos/medium/7715073.jpg
downloading: http://mw2.google.com/mw-panoramio/photos/medium/1303971.jpg
downloading: http://mw2.google.com/mw-panoramio/photos/medium/270077.jpg
downloading: http://mw2.google.com/mw-panoramio/photos/medium/15502.jpg
...
...
Figure 2.8 shows the 20 images returned for this example. Now we just need to find
and match features between pairs of images.
2.3. Matching Geotagged Images
65
TIFF to PDF Converter | Convert TIFF to PDF, Convert PDF to TIFF
PDF to TIFF Converter doesn't require other third-party such as Adobe Acrobat. PDF to TIFF Converter can create the output TIFF image with 68-1024 dpi.
add signature to pdf reader; create transparent signature stamp for pdf
Matching using local descriptors
Having downloaded the images, we now need to extract local descriptors. In this case
we will use SIFT descriptors as described in the previous section. Let’s assume that
the images have been processed with the SIFT extraction code and the features are
stored in files with the same name as the images (but with file ending ".sift" instead of
".jpg"). The lists imlist and featlist are assumed to contain the filenames. We can do a
pairwise matching between all combinations as follows.
import sift
nbr
_
images len(imlist)
matchscores zeros((nbr
_
images,nbr
_
images))
for i in range(nbr
_
images):
for j in range(i,nbr
_
images)# only compute upper triangle
print ’comparing ’, imlist[i], imlist[j]
l1,d1 = sift.read
_
features
_
from
_
file(featlist[i])
l2,d2 = sift.read
_
features
_
from
_
file(featlist[j])
matches = sift.match
_
twosided(d1,d2)
nbr
_
matches sum(matches > 0)
print ’number of f matches s = ’, nbr
_
matches
matchscores[i,j] = nbr
_
matches
# copy values
for i in range(nbr
_
images):
for j in range(i+1,nbr
_
images)# no need to copy diagonal
matchscores[j,i] = matchscores[i,j]
We store the number of matching features between each pair in matchscores. The
last part of copying the values to fill the matrix completely is not necessary since this
"distance measure" is symmetric, it just looks better that way. The matchscores matrix
for these particular images looks like this:
662 0 0 2 0 0 0 0 1 0 0 1 2 0 3 0 19 1 0 2
0 901 0 1 0 0 0 1 1 0 0 1 0 0 0 0 0 0 1 2
0 0 266 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
2 1 0 1481 0 0 2 2 0 0 0 2 2 0 0 0 2 3 2 0
0 0 0 0 1748 0 0 1 0 0 0 0 0 2 0 0 0 0 0 1
0 0 0 0 0 1747 0 0 1 0 0 0 0 0 0 0 0 1 1 0
0 0 0 2 0 0 555 0 0 0 1 4 4 0 2 0 0 5 1 0
0 1 0 2 1 0 0 2206 0 0 0 1 0 0 1 0 2 0 1 1
1 1 0 0 0 1 0 0 629 0 0 0 0 0 0 0 1 0 0 20
0 0 0 0 0 0 0 0 0 829 0 0 1 0 0 0 0 0 0 2
0 0 0 0 0 0 1 0 0 0 1025 0 0 0 0 0 1 1 1 0
1 1 0 2 0 0 4 1 0 0 0 528 5 2 15 0 3 6 0 0
66
2.3.Matching Geotagged Images
2 0 0 2 0 0 4 0 0 1 0 5 736 1 4 0 3 37 1 0
0 0 1 0 2 0 0 0 0 0 0 2 1 620 1 0 0 1 0 0
3 0 0 0 0 0 2 1 0 0 0 15 4 1 553 0 6 9 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2273 0 1 0 0
19 0 0 2 0 0 0 2 1 0 1 3 3 0 6 0 542 0 0 0
1 0 0 3 0 1 5 0 0 0 1 6 37 1 9 1 0 527 3 0
0 1 0 2 0 1 1 1 0 0 1 0 1 0 1 0 0 3 1139 0
2 2 0 0 1 0 0 1 20 2 0 0 0 0 0 0 0 0 0 499
Using this as a simple distance measure between images (images with similar content
have higher number of matching features), we can now connect images with similar
visual content.
Visualizing connected images
Let’s visualize the connections between images defined by them having matching
local descriptors. To do this we can show the images in a graph with edges in-
dicating connections. We will use the
pydot
package (http://code.google.com/p/
pydot/) which is a Python interface to the powerful GraphViz graphing library. Pydot
uses Pyparsing (http://pyparsing.wikispaces.com/) and GraphViz (http://www.
graphviz.org/) but don’t worry, all of them are easy to install in just a few minutes.
Pydot is very easy to use. The following code snippet illustrates this nicely by
creating a graph illustrating a tree with depth two and branching factor five adding
numbering to the nodes. The graph is shown in Figure 2.9. There are many ways to
customize the graph layout and appearance. For more details, see the Pydot docu-
mentation or the description of the DOT language used by GraphViz at http://www.
graphviz.org/Documentation.php.
import pydot
= pydot.Dot(graph
_
type=’graph’)
g.add
_
node(pydot.Node(str(0),fontcolor=’transparent’))
for i in range(5):
g.add
_
node(pydot.Node(str(i+1)))
g.add
_
edge(pydot.Edge(str(0),str(i+1)))
for j in range(5):
g.add
_
node(pydot.Node(str(j+1)+’-’+str(i+1)))
g.add
_
edge(pydot.Edge(str(j+1)+’-’+str(i+1),str(j+1)))
g.write
_
png(’graph.jpg’,prog=’neato’)
Let’s get back to our example with the geotagged images. To create a graph show-
ing potential groups of images, we create an edge between nodes if the number of
matches is above a threshold. To get the images in the graph you need to use the
full path of each image (represented by the variable path in the example below). To
2.3. Matching Geotagged Images
67
Figure 2.9: An example of using pydot to create graphs.
make it look nice we also scale each image to a thumbnail with largest side 100 pixels.
Here’s how to do it:
import pydot
threshold = 2 # min number of matches needed to create link
= pydot.Dot(graph
_
type=’graph’# don’t want the default directed graph
for i in range(nbr
_
images):
for j in range(i+1,nbr
_
images):
if matchscores[i,j] > threshold:
#first image in pair
im = Image.open(imlist[i])
im.thumbnail((100,100))
filename str(i)+’.png’
im.save(filename) # need temporary files of the e right t size
g.add
_
node(pydot.Node(str(i),fontcolor=’transparent’,
shape=’rectangle’,image=path+filename))
# second image in pair
im = Image.open(imlist[j])
im.thumbnail((100,100))
filename str(j)+’.png’
im.save(filename) # need temporary files of the e right t size
g.add
_
node(pydot.Node(str(j),fontcolor=’transparent’,
shape=’rectangle’,image=path+filename))
g.add
_
edge(pydot.Edge(str(i),str(j)))
68
2.3.Matching Geotagged Images
g.write
_
png(’whitehouse.png’)
The result should look something like Figure 2.10 depending on which images you
download. For this particular set, we see two groups of images, one from each side of
the White house.
This application was a very simple example of using local descriptors for matching
regions between images. For example, we did not use any verification on the matches.
This can be done (in a very robust way) using concepts that we will define in the
coming two chapters.
Exercises
1. Modify the function for matching Harris corner points to also take a maximum
pixel distance between points for them to be considered as correspondences in
order to make matching more robust.
2. Incrementally apply stronger blur (or ROF de-noising) to an image and extract
Harris corners. What happens?
3. An alternative corner detector to Harris is the FAST corner detector. There
are a number of implementations including a pure Python version available at
http://www.edwardrosten.com/work/fast.html. Try this detector, play with
the sensitivity threshold, and compare the corners with the ones from our Harris
implementation.
4. Create copies of an image with different resolutions (for example by halving the
size a few times). Extract SIFT features for each image. Plot and match features
to get a feel for how and when the scale independence breaks down.
5. The VLFeat command line tools also contain an implementation of Maximally
Stable Extremal Regions (MSER), http://en.wikipedia.org/wiki/Maximally
_
stable
_
extremal
_
regions, a region detector that finds blob like regions. Create
afunction for extracting MSER regions and pass them to the descriptor part of
SIFT using the "--read-frames" option and one function for plotting the ellipse
regions.
6. Write a function that matches features between a pair of images and estimates
the scale difference and in-plane rotation of the scene based on the correspon-
dences.
2.3. Matching Geotagged Images
69
Figure 2.10: An example of grouping images taken at the same geographic location
using local descriptors.
70
2.3.Matching Geotagged Images
Documents you may be interested
Documents you may be interested