<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkMFQ3kycCp7ImA9WhRaE0w.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743</id><updated>2012-02-15T10:06:52.798-05:00</updated><category term="Windows XP" /><category term="filename length" /><category term="Image" /><category term="bugs" /><category term="C" /><category term="Microsoft Visual Studio 2008" /><category term="static variables" /><category term="Protocols" /><category term="Windows" /><category term="retreive image" /><category term="kinect" /><category term="ASP.NET" /><category term="rss feeds" /><category term="JQuery" /><category term="execute dos commands" /><category term="open terminal here" /><category term="implementing interfaces" /><category term="rss" /><category term="SVM" /><category term="Networking" /><category term="email" /><category term="c++" /><category term="hashing" /><category term="LINQ" /><category term="xml" /><category term="Data Structures" /><category term="MySQL" /><category term="reviews" /><category term="Shell Script" /><category term="sales force" /><category term="CSS" /><category term="java" /><category term="Webcam" /><category term="get IP Address" /><category term="execution time calculate" /><category term="Pointers" /><category term="libsvm" /><category term="Tips" /><category term="lambda" /><category term="philosophy" /><category term="filter" /><category term="android" /><category term="human computer interaction" /><category term="ieee 1394 camera" /><category term="html" /><category term="Eclipse" /><category term="Socket" /><category term="ubuntu" /><category term="testing" /><category term="hmm" /><category term="insert image" /><category term="articles" /><category term="Python" /><category term="Queue" /><category term="Installation Troubleshooting" /><category term="Apache POI" /><category term="java mail" /><category term="OpenCV" /><category term="map" /><category term="fedora" /><category term="pattern recognition" /><category term="Robotics" /><category term="Programming" /><category term="Strings" /><category term="GTK" /><category term="gnome" /><category term="generate hash" /><category term="random numbers" /><category term="Web Apps" /><category term="Dev C++ Compiler" /><category term="database" /><category term="linux" /><category term="general tips" /><category term="SQL Server 2008" /><category term="Cloud Computing" /><category term="Discussions" /><category term="reduce" /><category term="Random Port" /><category term="Face Tracer" /><category term="Stack" /><category term="ssh" /><category term="file permissions" /><category term="NoSQL" /><category term="Google" /><category term="wxPython" /><category term="Port" /><category term="matlab" /><category term="C#" /><category term="file hash" /><category term="Google Chrome" /><category term="computer vision" /><category term="tinyOS" /><category term="computer vision basics" /><category term="Upload Images" /><category term="Orkut" /><category term="research papers" /><category term="Shell Scripting" /><category term="machine learning" /><category term="send email" /><title>DeveloperStation.ORG</title><subtitle type="html">Learn n Share!!</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.developerstation.org/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.developerstation.org/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>120</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DeveloperStation" /><feedburner:info uri="developerstation" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkMMQHg7fip7ImA9WhRaEEU.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-6308298219383300587</id><published>2012-01-29T21:22:00.001-05:00</published><updated>2012-02-12T18:14:41.606-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-12T18:14:41.606-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pattern recognition" /><category scheme="http://www.blogger.com/atom/ns#" term="hmm" /><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="machine learning" /><category scheme="http://www.blogger.com/atom/ns#" term="articles" /><title>Parameter Selection in Hidden Markov Models</title><content type="html">In this post, I discuss the &lt;b&gt;criterion for selecting parameters&lt;/b&gt; of an&amp;nbsp;Hidden Markov Model (HMM) for optimum training. If you still do not properly understand whats an HMM, please refer this &lt;a href="http://www.developerstation.org/2011/11/hidden-markov-models-for-dummies.html" target="_blank"&gt;article&lt;/a&gt; on HMMs. In order to classify data, one HMM is needed per class.&lt;br /&gt;
&lt;br /&gt;
Assume that we want to&amp;nbsp;have a Discrete HMM represented by&amp;nbsp;&lt;span style="font-family: Calibri;"&gt;&lt;b&gt;λ( A, B, π)&lt;/b&gt;&lt;/span&gt;. &lt;b&gt;O&lt;/b&gt; be the set of observations and&amp;nbsp;&lt;b style="font-family: Calibri;"&gt;N&lt;/b&gt;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;&amp;nbsp;&lt;/span&gt;to be number of states in a HMM and&amp;nbsp;&lt;b style="font-family: Calibri;"&gt;M&lt;/b&gt;&amp;nbsp;be the number of&amp;nbsp;unique&amp;nbsp;symbols.&lt;span style="font-family: Calibri;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: Calibri;"&gt;&lt;b&gt;P(O|&lt;/b&gt;&lt;/span&gt;&lt;b&gt;λ) &amp;nbsp;= P = likelihood that an observation matches the given HMM model&lt;/b&gt;.&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;
The following are some of the criteria in selecting parameters in Hidden Markov Models (taken from&amp;nbsp;&lt;a href="http://www.alcatel-lucent.com/bstj/vol62-1983/articles/bstj62-4-1075.pdf" target="_blank"&gt;Bell System Journal&lt;/a&gt;):&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Initial Estimates of A and B&lt;/b&gt;: We know that HMM classifier can be trained using Baum-Welch algorithm. For the given set of observations sequences (&lt;b&gt;O1&lt;/b&gt;, &lt;b&gt;O2&lt;/b&gt;, ......) in&amp;nbsp;Baum-Welch&amp;nbsp;algorithm,&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;λ&lt;/span&gt; is re-estimated iteratively such that &lt;b&gt;P&lt;/b&gt;&amp;nbsp;is maximized. This depends on the initial parameters of HMM i.e. &amp;nbsp;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;λ.&lt;b&gt; Different values of A, B and&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Calibri;"&gt;&lt;b&gt;π&lt;/b&gt;&lt;/span&gt;&lt;b&gt; gives different likelihoods&lt;/b&gt;. Different values of&amp;nbsp;&lt;b style="font-family: Calibri;"&gt;λ&lt;/b&gt; give different results. There is no one right way to select initial estimates.&amp;nbsp;Hence, they can be of any random values( however, the matrices&amp;nbsp;&lt;b style="font-family: Calibri;"&gt;A, B and&amp;nbsp;π&lt;/b&gt;&amp;nbsp;should sum to 1 along the rows).&amp;nbsp;&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;HMM structure and number of states&lt;/b&gt;: Structure of an HMM has an effect on performance of the HMM. For example in speech recognition, a HMM which is modeled&amp;nbsp;from left to right is preferred. &lt;b&gt;There also is no need for a state to traverse to each and every state in the model&lt;/b&gt;. i.e. Few elements of &lt;b&gt;A&lt;/b&gt; can be &lt;b&gt;zero&lt;/b&gt;.&amp;nbsp;If &lt;b&gt;N&lt;/b&gt; is too large reliable determination of &lt;b&gt;A&lt;/b&gt; and &lt;b&gt;B&lt;/b&gt; can become hard. If &lt;b&gt;N&lt;/b&gt; is large, also &lt;b&gt;Viterbi Decoding&lt;/b&gt; becomes hard. There is also no right way to choose N as it need not be related to a "observable phenomenon" in the problem.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Multiple Observation sequences:&lt;/b&gt;&amp;nbsp;Multiple observation sequences (from different training examples of same class) need to be used. Mixing training samples from different sources is a good idea.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Constraints on A, B matrices during training&lt;/b&gt;: The matrices &lt;b&gt;A&lt;/b&gt;, &lt;b&gt;B&lt;/b&gt; and&amp;nbsp;&lt;b style="font-family: Calibri;"&gt;π &lt;/b&gt;&amp;nbsp;can take any values (if &amp;nbsp;they follow the constraints such as along each row of a matrix sum of elements needs to be 1). Its found that a HMM where, a state can traverse to all the states is not so flexible. At the same time, a state transition should also not occur "within" the state or "only" to next state. Such restrictions might constrain the level to which the model can be trained. For example in speech models, the transition is usually from left to right, so the matrix elements are zero below the diagonal. If the matrix B is unconstrained and the data set for training is limited, it is likely that b&lt;sub&gt;j&lt;/sub&gt;(k)=0. There are some solutions for this problem in the &lt;a href="http://www.alcatel-lucent.com/bstj/vol62-1983/articles/bstj62-4-1075.pdf" target="_blank"&gt;journal&lt;/a&gt;.&lt;/li&gt;
&lt;br /&gt;
&lt;li&gt;&lt;b&gt;Multiple estimates of A, B and averaging&lt;/b&gt;: It is known that different initial values of&amp;nbsp;&lt;b style="font-family: Calibri;"&gt;λ&lt;/b&gt;&amp;nbsp;is likely to give different likelihoods for a testing set. So, different values of&amp;nbsp;&lt;b style="font-family: Calibri;"&gt;λ&lt;/b&gt;&amp;nbsp;needs to implemented and averaged (average values of matrix elements of&amp;nbsp;&lt;b&gt;A&lt;/b&gt;,&amp;nbsp;&lt;b&gt;B&lt;/b&gt;&amp;nbsp;and&amp;nbsp;&lt;b style="font-family: Calibri;"&gt;π&lt;/b&gt;). However, it was observed that results of the averaged model was not better than other best solutions computed. So, picking the model that has low memory constraint and gives good results should be picked.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-6308298219383300587?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QtNiQWr7MVmU6ZgWpdpkmGCE_P0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QtNiQWr7MVmU6ZgWpdpkmGCE_P0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QtNiQWr7MVmU6ZgWpdpkmGCE_P0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QtNiQWr7MVmU6ZgWpdpkmGCE_P0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/uK42SG5QeZA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/6308298219383300587/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2012/01/parameters-in-hidden-markov-models.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/6308298219383300587?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/6308298219383300587?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/uK42SG5QeZA/parameters-in-hidden-markov-models.html" title="Parameter Selection in Hidden Markov Models" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2012/01/parameters-in-hidden-markov-models.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EFQn86cCp7ImA9WhRUEU0.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-4171322754160916100</id><published>2012-01-20T20:33:00.001-05:00</published><updated>2012-01-20T20:33:33.118-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-20T20:33:33.118-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Installation Troubleshooting" /><title>Install Boost Libraries on Ubuntu</title><content type="html">I've heard a lot about Boost Libraries. They are well known in the programming community as one of the most well written, quite handy C++ libraries one can use. You can download them &lt;a href="http://www.boost.org/" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For a quick install of Boost libraries on Ubuntu, use the following command:&lt;br /&gt;
&lt;script class="brush: bash" type="syntaxhighlighter"&gt;
sudo apt-get install libboost-dev
&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;
To quickly learn about Boost Library, click &lt;a href="http://en.highscore.de/cpp/boost/" target="_blank"&gt;here&lt;/a&gt; for free online&amp;nbsp;accessible book.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-4171322754160916100?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/U_hTLFECyuOLLHWeTEq2PCzhqEg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U_hTLFECyuOLLHWeTEq2PCzhqEg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/U_hTLFECyuOLLHWeTEq2PCzhqEg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U_hTLFECyuOLLHWeTEq2PCzhqEg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/28ciO5Zo38A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/4171322754160916100/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2012/01/install-boost-libraries-on-ubuntu.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/4171322754160916100?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/4171322754160916100?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/28ciO5Zo38A/install-boost-libraries-on-ubuntu.html" title="Install Boost Libraries on Ubuntu" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2012/01/install-boost-libraries-on-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UEQH0-eSp7ImA9WhRVGEw.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-5189945400331415452</id><published>2012-01-17T11:32:00.001-05:00</published><updated>2012-01-17T11:53:21.351-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-17T11:53:21.351-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenCV" /><category scheme="http://www.blogger.com/atom/ns#" term="machine learning" /><title>Kmeans clustering in OpenCV with C++</title><content type="html">Kmeans clustering is one of the most widely used UnSupervised Learning Algorithms. If you are not sure what Kmeans is, refer &lt;a href="http://en.wikipedia.org/wiki/K-means_clustering#Algorithms" target="_blank"&gt;this&lt;/a&gt; article. Also if you have heard about the term Vector Quantization, Kmeans is closely related to that (refer &lt;a href="http://docs.scipy.org/doc/scipy/reference/cluster.vq.html" target="_blank"&gt;this&lt;/a&gt; article to know more about it). &lt;a href="http://www.autonlab.org/tutorials/kmeans.html" target="_blank"&gt;Autonlab&lt;/a&gt; has a great ppt on Kmeans Clustering.&lt;br /&gt;
&lt;br /&gt;
First, I'll talk about the kmeans usage in OpenCV&amp;nbsp;with C++&amp;nbsp;and then I'll explain it with a program. If you are not yet comfortable in OpenCV with &amp;nbsp;C++, please refer to this &lt;a href="http://www.developerstation.org/2012/01/access-mat-in-c-using-opencv.html" target="_blank"&gt;article&lt;/a&gt;&amp;nbsp;and the pretty much everything else is the same as in C API (where you use IplImage*,etc).&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.developerstation.org/search/label/OpenCV" target="_blank"&gt;Btw, My other programs in OpenCV will be posted here.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Function call in C++ API of OpenCV accepts the input in following format:&lt;br /&gt;
&lt;i&gt;&lt;b&gt;double kmeans(const Mat&amp;amp; samples, int clusterCount, Mat&amp;amp; labels, TermCriteria termcrit, int attempts, int flags, Mat* centers);&lt;/b&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Parameters explained as follows:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;samples&lt;/b&gt;: It contains the data. Each row represents a Feature Vector. Each co lumn in a row represent a dimension. So, we can have multiple dimensions of data in the feature vector. Example if we have &lt;b&gt;50, 5 dimensional feature vector, we will have 50 rows, 5 colums&lt;/b&gt; of this matrix. One thing interesting which I've noticed is &lt;b&gt;kmeans&lt;/b&gt; doesn't work with &lt;b&gt;CV_64F&lt;/b&gt; type.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;clusterCount&lt;/b&gt;: It should be specified beforehand. We need to know how many clusters do we divide the data into. It is an integer.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;labels&lt;/b&gt;: It is an output Matrix. If we had a Matrix of above specified size (i.e &lt;b&gt;50 x 5&lt;/b&gt; ), we will have &lt;b&gt;50 x 1&lt;/b&gt; output Matrix. It determines which cluster the feature vector belongs. It starts with &lt;b&gt;0, 1, .... (number of clusters-1)&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TermCriteria&lt;/b&gt;: It determines the criteria in applying the algorithm. Max iterations, accuracy,etc.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;attempts&lt;/b&gt;: number of attempts made with different initial labelling.&amp;nbsp;Also refer documentation for &lt;a href="http://opencv.willowgarage.com/documentation/cpp/clustering_and_search_in_multi-dimensional_spaces.html#cv-kmeans" target="_blank"&gt;elaborate&lt;/a&gt; information on this parameter.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;flags&lt;/b&gt;: It can be&lt;br /&gt;&lt;b&gt;KMEANS_RANDOM_CENTERS&lt;/b&gt; &amp;nbsp; (for random initialization of cluster centers).&lt;br /&gt;&lt;b&gt;KMEANS_PP_CENTERS&lt;/b&gt; &amp;nbsp; (for kmeans++ version of initializing cluster centers)&lt;br /&gt;&lt;b&gt;KMEANS_USE_INITIAL_LABELS&lt;/b&gt; &amp;nbsp; (for user defined initialization).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;centers&lt;/b&gt;: Matrix holding center of each cluster. If we divide the &lt;b&gt;50 x 5&lt;/b&gt; feature vector into &lt;b&gt;2 clusters&lt;/b&gt;, we will have &lt;b&gt;2 centers of each in 5 dimensions&lt;/b&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Sample program is explained as follows:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script class="brush: cpp" type="syntaxhighlighter"&gt;
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
#include &lt;iostream&gt;

using namespace cv;
using namespace std;


int main( int /*argc*/, char** /*argv*/ )
{
 cout &lt;&lt; "\n Usage in C++ API:\n double kmeans(const Mat&amp; samples, int clusterCount, Mat&amp; labels, TermCriteria termcrit, int attempts, int flags, Mat* centers) \n\n\n" &lt;&lt; endl;

 Mat points(sampleCount,dimensions, CV_32F,Scalar(10));
 Mat labels;
 Mat centers(clusterCount, 1, points.type());

 int clusterCount = 2;
 int dimensions = 5;
 int sampleCount = 50;

 // values of 1st half of data set is set to 10
 //change the values of 2nd half of the data set; i.e. set it to 20

 for(int i =24;i&lt;points.rows;i++)
 {
  for(int j=0;j&lt;points.cols;j++)
  {
   points.at&lt;float&gt;(i,j)=20;
  }
 }


 kmeans(points, clusterCount, labels, TermCriteria( CV_TERMCRIT_EPS+CV_TERMCRIT_ITER, 10, 1.0), 3, KMEANS_PP_CENTERS, centers);
    // we can print the matrix directly.
 cout&lt;&lt;"Data: \n"&lt;&lt;points&lt;&lt;endl;
 cout&lt;&lt;"Center: \n"&lt;&lt;centers&lt;&lt;endl;
 cout&lt;&lt;"Labels: \n"&lt;&lt;labels&lt;&lt;endl;
 return 0;
}
&lt;/script&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-5189945400331415452?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/y5jljaw0Cq9To4n5arUblIhWkVo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y5jljaw0Cq9To4n5arUblIhWkVo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/y5jljaw0Cq9To4n5arUblIhWkVo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y5jljaw0Cq9To4n5arUblIhWkVo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/dyamrNqGFdE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/5189945400331415452/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2012/01/kmeans-clustering-in-opencv-with-c.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/5189945400331415452?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/5189945400331415452?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/dyamrNqGFdE/kmeans-clustering-in-opencv-with-c.html" title="Kmeans clustering in OpenCV with C++" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2012/01/kmeans-clustering-in-opencv-with-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEINRno_eSp7ImA9WhRUEEo.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-4426530775352250351</id><published>2012-01-13T15:56:00.001-05:00</published><updated>2012-01-20T10:16:37.441-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-20T10:16:37.441-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenCV" /><title>Access Pixels in C++ using OpenCV</title><content type="html">I'm writing this blog post since, I've seen many people while moving from C API to C++ API have faced a lot of confusion in understanding it.&lt;br /&gt;
&lt;br /&gt;
This post explains on how to use &lt;b&gt;cv::Mat&lt;/b&gt; datatype in accessing pixels of a Image or elements of a Matrix. An example of &lt;b&gt;cv::Mat_&lt;/b&gt; is also shown.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.developerstation.org/search/label/OpenCV" target="_blank"&gt;Btw, My other programs in OpenCV will be posted here.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Many people still write code using &lt;b&gt;IplImage*&lt;/b&gt; or &lt;b&gt;CvMat*&lt;/b&gt; datatype. The sight of pointers scare a lot of people (except for some). With moving to C++ API, one can make use of C++ references which are more easier to understand and also one can use &lt;b&gt;Object Oriented Programming&lt;/b&gt; techniques to bring in more easier to write code and flexibity in programming.&lt;br /&gt;
&lt;br /&gt;
Moving to C++ API hasn't been that tough for me but, it definitely took a while. Now, my code looks more cleaner that before. I recommend everyone to move to C++ API using the &lt;b&gt;cv::Mat&lt;/b&gt; type.&lt;br /&gt;
&lt;br /&gt;
Sometimes, when you don't want to deal with the return type of the Matrix while accessing the elements (i.e. without the use of ".&lt;b&gt;at" &lt;/b&gt;operator), you can use &lt;b&gt;cv::Mat_&lt;/b&gt;&amp;nbsp;(which is a template sub class of &lt;b&gt;cv::Mat&lt;/b&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Taking care of the data-type of Matrix elements is really important&lt;/b&gt;. I didn't care much about it while using the C API. But C++ API makes you more aware of the data-type of elements of the Matrix. This is for good as it encourages efficient usage of memory.&lt;br /&gt;
&lt;br /&gt;
To use C++ API, you need the following headers and namespace.

&lt;script class="brush: cpp" type="syntaxhighlighter"&gt;
#include &lt;opencv2/core/core.hpp&gt;
#include &lt;opencv2/imgproc/imgproc.hpp&gt;
#include &lt;opencv2/highgui/highgui.hpp&gt;

using namespace cv;
&lt;/script&gt;

&lt;br /&gt;
&lt;br /&gt;
Fore more faster ways of accessing pixels, refer OpenCV &lt;a href="http://opencv.willowgarage.com/documentation/cpp/fast_element_access.html" target="_blank"&gt;documentation&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The following code is used to:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Declare.&lt;/li&gt;
&lt;li&gt;Assign.&lt;/li&gt;
&lt;li&gt;Print or Access&lt;/li&gt;
&lt;/ol&gt;
&amp;nbsp;values of pixels in&amp;nbsp;Images or elements in Matrices of &lt;b&gt;cv::Mat&lt;/b&gt; type in OpenCV:
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Declaring Matrices:&lt;/b&gt;
&lt;script class="brush: cpp" type="syntaxhighlighter"&gt;
//for a black and white image as there is only 1 channel with range of 0-&gt;255
Mat A = Mat (480, 640, CV_8U);

//for a colored RGB image as there are 3 channels with each channel ranging from 0-&gt;255
Mat B = Mat (480, 640, CV_8UC3);

//for images in other colorspaces, depending on the range, you can use others. refer http://opencv.itseez.com/modules/core/doc/old_basic_structures.html for aliases

// for a matrix of 10 rows and 3 colums with unsigned 16 bit integer
Mat C = Mat (10, 3, CV_16U);

// for double precision floating point with 1 channel of data. 
Mat D = Mat (480, 640, CV_64FC1);

// for double precision floating point with 3 channels of data. 
Mat E = Mat (48, 2, CV_64FC3);

const int sz[]={3,2,3,3};

Mat F = Mat (4, sz, CV_64F,Scalar(1));

// example of cv::Mat_
Mat G(3,3,CV_64F,Scalar(0));
Mat_&lt;double&gt; G_;
G_ = G;
// how to use G_ is specified below
&lt;/script&gt;


You have to know the data-type of elements of the Matrix before accessing or printing them. 
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;For assigning values:&lt;/b&gt;
&lt;script class="brush: cpp" type="syntaxhighlighter"&gt;
//for a single channel black and white image
A.at&lt;uchar&gt;(1,1) = 255;

//for a single channel colored image in rgb channels i.e 3 channels
B.at&lt;uchar&gt;(1,2)[0] = 255;
B.at&lt;uchar&gt;(1,2)[1] = 0;
B.at&lt;uchar&gt;(1,2)[2] = 122;

// the above matrix B can also be written as follows:

B.at&lt;vec3b&gt;(1,2)[0] = 255;
B.at&lt;vec3b&gt;(1,2)[1] = 0;
B.at&lt;vec3b&gt;(1,2)[2] = 122;

// similarly Vec3b refers to 3 channel uchar data.
// similarly Vec3s is 3 channel short data type
// similarly Vec4f is 2 channel float data type.
// similarly Vec5d is 5 channel double datatype.

C.at&lt;float&gt;(9,2) = 20;

D.at&lt;double&gt;(20,20) = 40.0004;

E.at&lt;double&gt;(42,2)[0] = 41.001;
E.at&lt;double&gt;(42,2)[1] = 42.024;
E.at&lt;double&gt;(42,2)[2] = 43.344;

// the above matrix E can also be written as follows:

E.at&lt;vec3d&gt;(42,2)[0] = 41.001;
E.at&lt;vec3d&gt;(42,2)[1] = 42.024;
E.at&lt;vec3d&gt;(42,2)[2] = 43.344;

//accessing matrix F using iterator
MatIterator_&lt;double&gt; iter = F.begin&lt;double&gt;(), it_end = F.end&lt;double&gt;();

for( ; iter != it_end; ++iter )                                               // Iterate to completion
{
    *iter = 10.00; //assigning value
}

// using Matrix G using G_

G.at&lt;double&gt;(0,0) = 0.0;
// now using G_ which is more easier.
G_(0,0) = 0.0;
&lt;/script&gt;


&lt;b&gt;For printing values (same as above):&lt;/b&gt;

&lt;script class="brush: cpp" type="syntaxhighlighter"&gt;
//for printing a single channel black and white image
for(int i = 0;i&lt;A.rows;i++)
for(int j = 0;j&lt;A.cols;j++)
cout&lt;&lt;A.at&lt;uchar&gt;(i,j);

// or you can just print using the following
cout&lt;&lt;A&lt;&lt;endl;
//To access a single pixel of a 1 channel colored
//image in rgb channels i.e 3 channels

cout&lt;&lt; B.at&lt;uchar&gt;[0];
cout&lt;&lt; B.at&lt;uchar&gt;[1];
cout&lt;&lt; B.at&lt;uchar&gt;[2];

// the above matrix B can also be written as follows:

cout&lt;&lt; B.at&lt;vec3b&gt;[0];
cout&lt;&lt; B.at&lt;vec3b&gt;[1];
cout&lt;&lt; B.at&lt;vec3b&gt;[2];

// similarly Vec3b refers to 3 channel uchar data.
// similarly Vec3s is 3 channel short data type
// similarly Vec4f is 4 channel float data type.
// similarly Vec5d is 5 channel double datatype.

cout&lt;&lt; C.at&lt;float&gt;(9,2);

cout&lt;&lt; D.at&lt;double&gt;(20,20);

cout&lt;&lt; E.at&lt;double&gt;(42,2)[0];
cout&lt;&lt; E.at&lt;double&gt;(42,2)[1];
cout&lt;&lt; E.at&lt;double&gt;(42,2)[2];

// the above matrix E can also be written as follows:

cout&lt;&lt; E.at&lt;vec3d&gt;(42,2)[0];
cout&lt;&lt; E.at&lt;vec3d&gt;(42,2)[1];
cout&lt;&lt; E.at&lt;vec3d&gt;(42,2)[2];

for( ; iter != it_end; ++iter )
{
 cout&lt;&lt; *iter;
}

// similarly print Matrix G and G_

cout&lt;&lt;G.at&lt;double&gt;(0,0)&lt;&lt;endl;
cout&lt;&lt;G_(0,0)&lt;&lt;endl;
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-4426530775352250351?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/URTNWwz0ZPcyr3qghXPUhj7Olp0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/URTNWwz0ZPcyr3qghXPUhj7Olp0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/URTNWwz0ZPcyr3qghXPUhj7Olp0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/URTNWwz0ZPcyr3qghXPUhj7Olp0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/f4bejRaDn48" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/4426530775352250351/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2012/01/access-mat-in-c-using-opencv.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/4426530775352250351?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/4426530775352250351?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/f4bejRaDn48/access-mat-in-c-using-opencv.html" title="Access Pixels in C++ using OpenCV" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2012/01/access-mat-in-c-using-opencv.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEANRHgyeSp7ImA9WhRVE0U.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-7076197461769877720</id><published>2012-01-12T11:45:00.004-05:00</published><updated>2012-01-12T11:46:35.691-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-12T11:46:35.691-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="machine learning" /><category scheme="http://www.blogger.com/atom/ns#" term="Installation Troubleshooting" /><title>Installing GHMM</title><content type="html">There seems to be some&amp;nbsp;dependency&amp;nbsp;issues while installing GHMM in Linux (Ubuntu). The following script installs GHMM (A HMM lib written in C with a python wrapper and a GUI).&lt;br /&gt;
&lt;br /&gt;
I running Ubuntu 10.04 LTS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script class="brush: bash" type="syntaxhighlighter"&gt;
#install dependencies
sudo apt-get install python-dev
sudo apt-get install python-scipy python-numpy
sudo apt-get install libxml2 libxml2-dev

#get ghmm
svn co https://ghmm.svn.sourceforge.net/svnroot/ghmm/trunk/ghmm

#install ghmm
cd ghmm
./autogen.sh
./configure
make 
sudo make install
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-7076197461769877720?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AqwrY-u1DVkPkRQCtrsKbFY8TlY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AqwrY-u1DVkPkRQCtrsKbFY8TlY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AqwrY-u1DVkPkRQCtrsKbFY8TlY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AqwrY-u1DVkPkRQCtrsKbFY8TlY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/bpybtD8OEms" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/7076197461769877720/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2012/01/installing-ghmm.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/7076197461769877720?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/7076197461769877720?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/bpybtD8OEms/installing-ghmm.html" title="Installing GHMM" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2012/01/installing-ghmm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYBSXczeCp7ImA9WhRXEEo.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-9101547036944194731</id><published>2011-12-14T08:53:00.001-05:00</published><updated>2011-12-16T17:55:58.980-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-16T17:55:58.980-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="lambda" /><category scheme="http://www.blogger.com/atom/ns#" term="map" /><category scheme="http://www.blogger.com/atom/ns#" term="filter" /><category scheme="http://www.blogger.com/atom/ns#" term="reduce" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Use of Lambda, Map, Reduce and Filter in Python</title><content type="html">&lt;br /&gt;
I have heard a lot about &lt;b&gt;Lambda&lt;/b&gt; on &lt;b&gt;Python&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
I was scared in the beginning as I thought the code was very cryptic until very recently explored what it is all about.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Lambda&lt;/b&gt; is a&amp;nbsp;anonymous&amp;nbsp;function that one can write for quick operations instead of formally writing a function using &lt;b&gt;def&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
It can be used in conjunction with other&amp;nbsp;functionality&amp;nbsp;like &lt;b&gt;Map, Reduce, Filter&lt;/b&gt; in Python.&lt;br /&gt;
&lt;br /&gt;
Examples of Lambda are given below.&lt;br /&gt;
&lt;br /&gt;
Map, Reduce and Filter functions in Python make writing code much more&amp;nbsp;easier (less lines of code) and I think they are &lt;b&gt;optimized&lt;/b&gt; &lt;a href="http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Loops" target="_blank"&gt;internally&lt;/a&gt;&amp;nbsp;which will make them more faster than writing custom code which will most probably&amp;nbsp;be sub-optimal in terms of performance.&lt;br /&gt;
&lt;br /&gt;
Here is a &lt;a href="http://bpgergo.blogspot.com/2011/08/matrix-multiplication-in-python.html"&gt;example&lt;/a&gt; of Matrix Multiplication (along with other optimizations) making use of Map along with some.&lt;br /&gt;
&lt;br /&gt;
Now lets see what Map, Reduce, Filter is and how Lambda can be used with them.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Map&lt;/b&gt; functionality in Python i.e. with Syntax &lt;b&gt;map(function, sequence)&lt;/b&gt;&amp;nbsp;takes a sequence of values and passes it to&amp;nbsp;function&amp;nbsp;and returns a list of items.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Filter&lt;/b&gt; functionality in Python i.e.&amp;nbsp;with Syntax&amp;nbsp;&lt;b&gt;filter(function, sequence)&lt;/b&gt;&amp;nbsp;takes a sequence of values and passes it to function and &lt;b&gt;returns a list of items&amp;nbsp;for which function(item) is true&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Reduce&lt;/b&gt; functionality in Python i.e. with Syntax &lt;b&gt;reduce(function, sequence)&lt;/b&gt;&amp;nbsp;takes first 2 items in sequence, processes them and takes result, next item and so on.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;script class="brush: python" type="syntaxhighlighter"&gt;
import random
# define some functions
def cube(number):
    return number*number*number

def add(x,y):
    return x+y

z= range(1,10)
random.shuffle(z)

print "filter: " + str(filter(cube, range(1,11)))
print "map: " + str(map(cube, range(1,11)))
print "reduce: " + str(reduce(add, range(1,11)))

print "Now doing something similar using lambda"

print  "filter: " + str(filter(lambda x: x*x*x, range(1,11)))

print "filter: z "+str(filter(lambda x: x&gt;5,range(1,10)))
print  "map: " + str(map(lambda x: x*x*x, range(1,11)))
print  "reduce: " + str(reduce(lambda x,y: x+y, range(1,11)))
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-9101547036944194731?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/S9P_ICRTosIILahmF-5FtXDtPY0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S9P_ICRTosIILahmF-5FtXDtPY0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/S9P_ICRTosIILahmF-5FtXDtPY0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S9P_ICRTosIILahmF-5FtXDtPY0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/RrJA7l70SaU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/9101547036944194731/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/12/use-of-lambda-map-reduce-and-filter-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/9101547036944194731?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/9101547036944194731?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/RrJA7l70SaU/use-of-lambda-map-reduce-and-filter-in.html" title="Use of Lambda, Map, Reduce and Filter in Python" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/12/use-of-lambda-map-reduce-and-filter-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUCRng4cCp7ImA9WhRUGEQ.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-8497422718523498590</id><published>2011-12-11T11:55:00.001-05:00</published><updated>2012-01-29T21:24:27.638-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-29T21:24:27.638-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="machine learning" /><title>KMeans and Vector Quantization</title><content type="html">KMeans clustering is a type of Vector Quantization ("Since vector quantization is a natural application for k-means, information theory terminology is often used."&lt;a href="http://docs.scipy.org/doc/scipy/reference/cluster.vq.html"&gt;[1]&lt;/a&gt; ).&lt;br /&gt;
&lt;br /&gt;
From Machine Learning perspective, feature vectors can be considered as code-word and the table mapping code-word to cluster ids is a codebook.&lt;br /&gt;
&lt;br /&gt;
Each feature vector to be clustered is considered as a code-word and in KMeans clustering, they are assigned to the closest centroid (cluster id).&lt;br /&gt;
&lt;br /&gt;
Pages describing Vector Quantization - KMeans:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.mqasem.net/vectorquantization/vq.html"&gt;Vector Quantization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.scipy.org/doc/scipy/reference/cluster.vq.html"&gt;Documentation on K-means clustering and VQ in &lt;b&gt;Python&lt;/b&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.developerstation.org/2012/01/kmeans-clustering-in-opencv-with-c.html"&gt;KMeans in OpenCV using &lt;b&gt;C++&lt;/b&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-8497422718523498590?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eAV0VFLoTNRy6Ey0lSQ7yCsjUR0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eAV0VFLoTNRy6Ey0lSQ7yCsjUR0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eAV0VFLoTNRy6Ey0lSQ7yCsjUR0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eAV0VFLoTNRy6Ey0lSQ7yCsjUR0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/Ekdi2V_dErk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/8497422718523498590/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/12/kmeans-and-vector-quantization.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/8497422718523498590?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/8497422718523498590?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/Ekdi2V_dErk/kmeans-and-vector-quantization.html" title="KMeans and Vector Quantization" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/12/kmeans-and-vector-quantization.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkADRX45eSp7ImA9WhRQE0U.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-3406764164238035193</id><published>2011-12-08T17:49:00.001-05:00</published><updated>2011-12-08T17:52:54.021-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-08T17:52:54.021-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Robotics" /><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="articles" /><category scheme="http://www.blogger.com/atom/ns#" term="human computer interaction" /><title>Interesting talk on Robotics and Artificial Intelligence</title><content type="html">This is an interesting talk by Dr. Andrew Ng at Stanford University on Future of Robotics and Artificial Intelligence. He talks about present problems in Robotics and Artificial Intelligence.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="450" src="http://www.youtube.com/embed/AY4ajbu_G3k" width="475"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-3406764164238035193?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LiFR6VG6E3vxW59ltp9WpBn447E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LiFR6VG6E3vxW59ltp9WpBn447E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LiFR6VG6E3vxW59ltp9WpBn447E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LiFR6VG6E3vxW59ltp9WpBn447E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/_9vbCzaXdk0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/3406764164238035193/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/12/interesting-talk-on-robotics-and.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/3406764164238035193?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/3406764164238035193?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/_9vbCzaXdk0/interesting-talk-on-robotics-and.html" title="Interesting talk on Robotics and Artificial Intelligence" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/AY4ajbu_G3k/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/12/interesting-talk-on-robotics-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEGSX45eip7ImA9WhRRFUo.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-81456501879845712</id><published>2011-11-26T20:17:00.001-05:00</published><updated>2011-11-29T08:50:28.022-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-29T08:50:28.022-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="research papers" /><title>Action Recognition Survey</title><content type="html">The paper titled "&lt;a href="http://www.umiacs.umd.edu/~pturaga/papers/survey_final.pdf" target="_blank"&gt;Machine Recognition of Human Activities: A survey&lt;/a&gt;" is an interesting Journal Paper I've read recently.&lt;br /&gt;
&lt;br /&gt;
It basically talks about the recent advances, open research problems, future directions of research in Action Recognition and different techniques employed to do Action Recognition.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-81456501879845712?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kcOq_cHVjDqeG3WjbyX642TMhlw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kcOq_cHVjDqeG3WjbyX642TMhlw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kcOq_cHVjDqeG3WjbyX642TMhlw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kcOq_cHVjDqeG3WjbyX642TMhlw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/LMugSMQ01CI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/81456501879845712/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/11/action-recognition-survey.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/81456501879845712?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/81456501879845712?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/LMugSMQ01CI/action-recognition-survey.html" title="Action Recognition Survey" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/11/action-recognition-survey.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEHRn4-fip7ImA9WhRRFUo.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-3144385717082858067</id><published>2011-11-25T00:08:00.001-05:00</published><updated>2011-11-29T08:50:37.056-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-29T08:50:37.056-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenCV" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Image Overlap in Android OpenCV</title><content type="html">Its been recently that I have been playing around with OpenCV on Android.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.developerstation.org/search/label/OpenCV" target="_blank"&gt;Btw, My other programs in OpenCV will be posted here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Basically, I've written a program that overlaps two images. One image exists in the "res" folder in android project and other image is the Image coming from the camera.&lt;br /&gt;
&lt;br /&gt;
Image coming from the camera is available in array of bytes. We convert it into a Bitmap, then into a "Mat". The other image is read as a "Mat" directly using &lt;b&gt;Utils.loadResource&lt;/b&gt; method.&lt;br /&gt;
&lt;br /&gt;
Now since both images are in Mat format, I use&amp;nbsp;&lt;b&gt;Mat.getNativeObjAddr()&lt;/b&gt; method from &lt;b&gt;android-opencv&lt;/b&gt; project to pass the image to JNI code. This is more useful as we can reconstruct &lt;b&gt;cv::Mat&lt;/b&gt; in JNI code more easily than passing bytes (lookup samples from &lt;a href="http://sourceforge.net/projects/opencvlibrary/files/opencv-android/" target="_blank"&gt;android-opencv&lt;/a&gt; project) and reconstructing them.&lt;br /&gt;
&lt;br /&gt;
Also, one thing to take care in number of channels in the images/Mat being processed. We need to make sure that all the images being operated on should be of same number of channels.&amp;nbsp;During this process, you might have to convert RGB to Gray or RGB to RGBA, etc.&lt;br /&gt;
&lt;br /&gt;
In the sample program, I've written a code to send RGBA image, RGB image to JNI (OpenCV C++) code and then convert RGB image to RGBA using cvtColor function. Then do a "&lt;b&gt;addweighted&lt;/b&gt;" function call on the 2 images and return it to Java code.&lt;br /&gt;
&lt;br /&gt;
I got the following image on my App where I performed merging &amp;nbsp;of two images:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-zMguVFYHwVk/Ts8lursBmMI/AAAAAAAABXM/lZCmitYNaKE/s1600/Image.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://4.bp.blogspot.com/-zMguVFYHwVk/Ts8lursBmMI/AAAAAAAABXM/lZCmitYNaKE/s400/Image.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
Using C++ (JNI) and Java in combination is more effective as there is more flexibility you can enjoy on Java(Android) and let the complex image processing stuff be done in C++ (faster way).&lt;br /&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;br /&gt;
If you are looking for the program to merge images in OpenCV, take a look at this &lt;a href="http://www.developerstation.org/2011/10/image-overlap-in-c.html" target="_blank"&gt;program&lt;/a&gt;. Use the link and the above mentioned tips to create Image Overlapping program for yourself on Android.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-3144385717082858067?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZxlpItFyK7dCc1kgaM1-86IRZuM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZxlpItFyK7dCc1kgaM1-86IRZuM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZxlpItFyK7dCc1kgaM1-86IRZuM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZxlpItFyK7dCc1kgaM1-86IRZuM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/qKdsSPktgK0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/3144385717082858067/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/11/image-overlap-in-android-opencv.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/3144385717082858067?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/3144385717082858067?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/qKdsSPktgK0/image-overlap-in-android-opencv.html" title="Image Overlap in Android OpenCV" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-zMguVFYHwVk/Ts8lursBmMI/AAAAAAAABXM/lZCmitYNaKE/s72-c/Image.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/11/image-overlap-in-android-opencv.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUGRX44eyp7ImA9WhRaEEU.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-2938542721549756767</id><published>2011-11-20T12:10:00.001-05:00</published><updated>2012-02-12T15:57:04.033-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-02-12T15:57:04.033-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="computer vision basics" /><category scheme="http://www.blogger.com/atom/ns#" term="machine learning" /><title>Hidden Markov Models for Dummies</title><content type="html">This article is a great collection of the best resources available on the web which explain &lt;b&gt;Hidden Markov Models&lt;/b&gt; and their applications.&lt;br /&gt;
&lt;br /&gt;
I think there is never a "best place" to learn&amp;nbsp;&lt;b&gt;all&lt;/b&gt;&amp;nbsp;the points of a new concept/idea. But, you need to go through a lot of sources (books, webpages, jounals, etc) to understand something.&lt;br /&gt;
&lt;br /&gt;
If you are done with learning what HMMs can do, you can checkout this &lt;a href="http://www.developerstation.org/2012/01/parameters-in-hidden-markov-models.html" target="_blank"&gt;post&lt;/a&gt; which discusses about selecting optimal parameters for training of a HMM classifier.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Here is a &lt;a href="http://www.autonlab.org/tutorials/hmm14.pdf" target="_blank"&gt;really good explanation&lt;/a&gt; of what &lt;b&gt;HMMs &lt;/b&gt;are all about. You need some &lt;a href="http://www.autonlab.org/tutorials/bayesnet.html" target="_blank"&gt;background&lt;/a&gt;&amp;nbsp;(Bayesian Networks)&amp;nbsp;with Probability though. The above website &lt;a href="http://www.autonlab.org/tutorials/" target="_blank"&gt;Autonlab&lt;/a&gt;&amp;nbsp;(from &lt;b&gt;Carnegie Mellon University&lt;/b&gt;)&amp;nbsp;has really good explanation/slides for Data Mining, Machine Learning, Pattern Recognition which is helpful to Math, Statistics, Computer Science researchers.&lt;/li&gt;
&lt;li&gt;Here is another &lt;a href="http://www.cs.otago.ac.nz/cosc348/hmm/hmm.pdf" target="_blank"&gt;link&lt;/a&gt;&amp;nbsp;(from&lt;b&gt; University of Otago&lt;/b&gt;, they make really good tutorials which start from basics) that explains &lt;b&gt;HMMs &lt;/b&gt;with basics of Probability and Naive C/C++ implementation.&lt;/li&gt;
&lt;li&gt;Here is another &lt;a href="http://www.cs.berkeley.edu/~pliang/cs294-spring08/lectures/hmm/slides.pdf" target="_blank"&gt;link&lt;/a&gt;&amp;nbsp;from &lt;b&gt;UC-Berkley&lt;/b&gt; which explains &lt;b&gt;Hidden Markov Models&lt;/b&gt; (in Practical Machine Learning class). This one clearly states learning, testing/classification without much deep explanation (on how they came up with the equations) and with quick formulae to start with. This is very much unlike other tutorials on the web which seemed to me confusing.&lt;/li&gt;
&lt;li&gt;Another tutorial &lt;a href="http://digital.cs.usu.edu/~cyan/CS7960/hmm-tutorial.pdf" target="_blank"&gt;here&lt;/a&gt;&amp;nbsp;(&lt;b&gt;Utah State University&lt;/b&gt;) describes &lt;b&gt;HMM &lt;/b&gt;and also talks about issues in implementing &lt;b&gt;HMM&lt;/b&gt; (floating point underflow problem).&lt;/li&gt;
&lt;li&gt;Matlab &lt;a href="http://www.mathworks.com/help/toolbox/stats/f8368.html#f10382" target="_blank"&gt;documentation website&lt;/a&gt; does a good job in explaining &lt;b&gt;Hidden Markov Models&lt;/b&gt; in a basic manner along with the code (to use this code, you need "Statistics" toolbox in Matlab).&lt;/li&gt;
&lt;li&gt;This &lt;a href="http://mlg.eng.cam.ac.uk/zoubin/papers/ijprai.pdf" target="_blank"&gt;article&lt;/a&gt;&amp;nbsp;(&lt;b&gt;University of Cambridge&lt;/b&gt;) compares Hidden Markov Models with &lt;b&gt;Dynamic&amp;nbsp;Bayesian Networks&lt;/b&gt;. Also covers other stuff on Computer Vision applications using these Stochastic Models.&lt;/li&gt;
&lt;li&gt;Most referred tutorial in writing other tutorials is "&lt;a href="http://www.ece.ucsb.edu/Faculty/Rabiner/ece259/Reprints/tutorial%20on%20hmm%20and%20applications.pdf" target="_blank"&gt;A tutorial on Hidden Markov Models and selected applications in speech recognition&lt;/a&gt;".&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Here are &lt;a href="http://www.youtube.com/playlist?list=PL1CB749287FDE7393" target="_blank"&gt;set of videos&lt;/a&gt; on Youtube that explain Hidden Markov Models in a more mathematical way! Other videos from that guy have excellent Machine Learning examples explained very mathematically and clearly!&lt;br /&gt;
&lt;br /&gt;
There are 3 problems to solve in Hidden Markov Model namely,&amp;nbsp;&lt;b&gt;State Estimation&lt;/b&gt;,&amp;nbsp;&lt;b&gt;Decoding&lt;/b&gt; or Most Probable Path (MPP) and&amp;nbsp;&lt;b&gt;Training&lt;/b&gt;/Learning HMM.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
The above 3 problems are solved using the following techniques:&lt;/div&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;State Estimation&lt;/b&gt;: Forward-Backward technique is used for &lt;b&gt;State Estimation&lt;/b&gt;&amp;nbsp;(what will be the next state, given set of observations). This step is also known as &lt;b&gt;Classification&lt;/b&gt;. This can be used in testing the classifier built.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Decoding or Most Probable Path&lt;/b&gt;:&lt;b&gt; Viterbi Decoding&lt;/b&gt; technique is used for estimating &lt;b&gt;Most Probable Path&lt;/b&gt; (given a set of observations, what is the most probable path that is taken that best explains the observations). This step is also known as &lt;b&gt;Decoding&lt;/b&gt;. This can be used in Testing the classifier built.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Training/Learning HMM&lt;/b&gt;:&lt;b&gt; Baum-Welch&lt;/b&gt; (&lt;b&gt;Expectation Maximization&lt;/b&gt;) technique is used for &lt;b&gt;Learning HMM&lt;/b&gt;.&amp;nbsp;If we are given a set of observations, we can predict the maximum likelihood HMM that may have produced the observations (adjust the HMM model that fits the data). This is also known as &lt;b&gt;Training&lt;/b&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;
For Computer Vision guys, these &lt;a href="http://rogerioferis.com/ClassMarch31/BehaviorClassMarch31.pdf" target="_blank"&gt;slides&lt;/a&gt; explains how to apply it to action recognition.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Once you are comfortable with basics of HMM, you might want to look into this &lt;a href="http://www.alcatel-lucent.com/bstj/vol62-1983/articles/bstj62-4-1075.pdf"&gt;paper&lt;/a&gt;. Here authors describe on how to select initial parameters of HMM.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
A background in Statisctical Pattern Recognition, Stochastics will definitely help in understanding Hidden Markov Models. Hidden Markov Models are widely used in Speech Recognition, Computer Vision (Gesture Recognition and Action Recognition).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
There are 3rd party libraries available on the web for use in your project. Also, there is a Matlab toolkit &lt;a href="http://www.cs.ubc.ca/~murphyk/Software/HMM/hmm.html" target="_blank"&gt;available&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-2938542721549756767?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NxXDyP9Gu0O_3WADYUlqboioM0k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NxXDyP9Gu0O_3WADYUlqboioM0k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NxXDyP9Gu0O_3WADYUlqboioM0k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NxXDyP9Gu0O_3WADYUlqboioM0k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/l_j1rekng5E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/2938542721549756767/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/11/hidden-markov-models-for-dummies.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/2938542721549756767?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/2938542721549756767?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/l_j1rekng5E/hidden-markov-models-for-dummies.html" title="Hidden Markov Models for Dummies" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/11/hidden-markov-models-for-dummies.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4CQHo5fyp7ImA9WhRQGEQ.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-2978276343930805463</id><published>2011-11-16T20:35:00.001-05:00</published><updated>2011-12-14T16:42:41.427-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-14T16:42:41.427-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="articles" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Computing" /><title>Move to the Cloud</title><content type="html">This is an interesting &lt;a href="http://www.eecs.berkeley.edu/Pubs/TechRpts/2009/EECS-2009-28.pdf"&gt;article&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.youtube.com/watch?v=IJCxqoh5ep4"&gt;video &lt;/a&gt;from UC Berkley, concerning Cloud Computing. It discusses about the need for Cloud for building Scalable Services,&amp;nbsp;opportunities&amp;nbsp;for Startups, advantages of Cloud, concerns about Cloud Computing!&lt;br /&gt;
&lt;br /&gt;
It also talks about present concerns about Cloud Computing, possible solutions. Its basically the way UC Berkley would want to see the Cloud Services evolve.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-2978276343930805463?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/K_7xVSaorte8ENFfW9pBMU9oQl8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K_7xVSaorte8ENFfW9pBMU9oQl8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/K_7xVSaorte8ENFfW9pBMU9oQl8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K_7xVSaorte8ENFfW9pBMU9oQl8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/5UlpwFQ7xF0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/2978276343930805463/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/11/move-to-cloud.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/2978276343930805463?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/2978276343930805463?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/5UlpwFQ7xF0/move-to-cloud.html" title="Move to the Cloud" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/11/move-to-cloud.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkECQn8_fyp7ImA9WhRRFUo.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-8861895505763989994</id><published>2011-11-09T07:53:00.000-05:00</published><updated>2011-11-29T08:51:03.147-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-29T08:51:03.147-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="research papers" /><category scheme="http://www.blogger.com/atom/ns#" term="articles" /><title>Possibilities with Array Cameras</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
This is a interesting video on usage of Array Cameras to avoid Occlusions. Array Cameras are a set of Cameras whose Images are Co-Planar .There are a lot of&amp;nbsp;possibilities&amp;nbsp;with usage of Array Cameras in Surveillance, Occlusion Avoidance.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://0.gvt0.com/vi/QNFARy0_c4w/0.jpg" height="350" width="400"&gt;&lt;param name="movie" value="http://www.youtube.com/v/QNFARy0_c4w&amp;fs=1&amp;source=uds" /&gt;





&lt;param name="bgcolor" value="#FFFFFF" /&gt;





&lt;embed width="400" height="350"  src="http://www.youtube.com/v/QNFARy0_c4w&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;br /&gt;
The link for this research paper from UCSD is &lt;a href="http://vision.ucsd.edu/kriegman-grp/research/synthetic_ap_tracking/" target="_blank"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-8861895505763989994?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/67B49IR4HV5LwTxwlDOV1pzWVAA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/67B49IR4HV5LwTxwlDOV1pzWVAA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/67B49IR4HV5LwTxwlDOV1pzWVAA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/67B49IR4HV5LwTxwlDOV1pzWVAA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/6RDirVjakiA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/8861895505763989994/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/11/possibilities-with-array-cameras.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/8861895505763989994?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/8861895505763989994?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/6RDirVjakiA/possibilities-with-array-cameras.html" title="Possibilities with Array Cameras" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/11/possibilities-with-array-cameras.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MDQH48eCp7ImA9WhRREkg.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-4051284520312915407</id><published>2011-11-02T10:43:00.002-04:00</published><updated>2011-11-25T15:04:31.070-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-25T15:04:31.070-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="articles" /><title>Apple's Siri and Android's Voice Control</title><content type="html">Its been a while since Apple's iPhone 4S was released and everyone going GAGA over Siri. It seems very funny looking over claims of Apple fanboi's to be able to talk to their phones and it replying it back. That feature has been in Android for almost an year.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;However, Siri is absolutely amazing&lt;/b&gt;.. Apple has once again shown us that better&amp;nbsp;implementation always attracts positive attention.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/Ucd8_5RLzL8/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Ucd8_5RLzL8&amp;fs=1&amp;source=uds" /&gt;
&lt;param name="bgcolor" value="#FFFFFF" /&gt;
&lt;embed width="320" height="266"  src="http://www.youtube.com/v/Ucd8_5RLzL8&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Presently,&amp;nbsp;&lt;b&gt;Android's voice feature is not as extensive as of Siri&lt;/b&gt;. For example, I can say "weather in Morgantown" in Android and it will give me a weather prediction on a Google search page. Siri will give me the weather directly by speaking to me (&lt;b&gt;which is really cool&lt;/b&gt;).&lt;br /&gt;
&lt;br /&gt;
We need to specify the input properly in Android. For example I can't say "drive to Pittsburgh" in Android (this opens up searching "drive to pittsburgh" in google search) rather, I would have to say "Navigate to Pittsburgh" which is not so natural (to me).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;However, &lt;a href="http://allthingsd.com/20111013/google-translate-can-now-say-take-that-siri-in-14-languages/"&gt;translate feature&lt;/a&gt; is awesome on Android&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/mJwL_JYk6Cc/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/mJwL_JYk6Cc&amp;fs=1&amp;source=uds" /&gt;



&lt;param name="bgcolor" value="#FFFFFF" /&gt;



&lt;embed width="320" height="266"  src="http://www.youtube.com/v/mJwL_JYk6Cc&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Android 4.0 features updated &lt;b&gt;text to speech&lt;/b&gt; feature, making the &lt;a href="http://android-developers.blogspot.com/2011/10/ics-and-non-public-apis.html"&gt;API&lt;/a&gt; more cleaner. I think this move will encourage more developers to bring in more apps to Android market. Previously, I believe developers would have to write it in C++ (unofficial API), now there is no need for that.&lt;br /&gt;
&lt;br /&gt;
No matter, &lt;b&gt;Siri is a great feature&lt;/b&gt; but I'm a little skeptical over its success as its not a natural interface to talk to phone. Google voice search, and voice dialer are great features on Android which were present since the days of Gingerbread.&amp;nbsp;But, I see very few people talking about it or using it extensively.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://technologizer.com/2011/10/20/how-disappointing-google-andy-rubin-dismisses-siri/"&gt;Andy Rubin also claims the same&lt;/a&gt;. They want to wait and see how the public reception of this feature will be.&lt;br /&gt;
&lt;br /&gt;
But on the other hand, &lt;b&gt;maybe Apple did the right thing by giving voice control in iPhone 4S a name ("Siri") and calling it an personal assistant&lt;/b&gt; or it is an marketing tactic made by Apple.&lt;br /&gt;
&lt;br /&gt;
I guess its time for Google to make the same move.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-4051284520312915407?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pKefaEOxhGX_EVexrhvjNLi5lOg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pKefaEOxhGX_EVexrhvjNLi5lOg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pKefaEOxhGX_EVexrhvjNLi5lOg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pKefaEOxhGX_EVexrhvjNLi5lOg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/yAdQgPakv_E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/4051284520312915407/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/11/apples-siri-and-androids-voice-control.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/4051284520312915407?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/4051284520312915407?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/yAdQgPakv_E/apples-siri-and-androids-voice-control.html" title="Apple's Siri and Android's Voice Control" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/11/apples-siri-and-androids-voice-control.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEMRHY4fip7ImA9WhRRFUo.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-645030477759199378</id><published>2011-10-31T11:50:00.001-04:00</published><updated>2011-11-29T08:51:25.836-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-29T08:51:25.836-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="research papers" /><category scheme="http://www.blogger.com/atom/ns#" term="articles" /><title>Object tracking survey</title><content type="html">This is an old Journal Paper I've read (long time back) on Object Tracking during Literature reivew: "&lt;a href="http://dl.acm.org/citation.cfm?id=1177355"&gt;Object Tracking: A Survey&lt;/a&gt;"&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This has a gist of almost all object tracking methods used till 2006.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-645030477759199378?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/N9M-WPHSsJzhevZi6OOxhLwtSQI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N9M-WPHSsJzhevZi6OOxhLwtSQI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/N9M-WPHSsJzhevZi6OOxhLwtSQI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/N9M-WPHSsJzhevZi6OOxhLwtSQI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/O_NchXm2WeI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/645030477759199378/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/10/object-tracking-survey.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/645030477759199378?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/645030477759199378?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/O_NchXm2WeI/object-tracking-survey.html" title="Object tracking survey" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/10/object-tracking-survey.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAEQ3k9eyp7ImA9WhRRFUo.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-5335136569679893371</id><published>2011-10-29T20:23:00.000-04:00</published><updated>2011-11-29T08:51:42.763-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-29T08:51:42.763-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="research papers" /><category scheme="http://www.blogger.com/atom/ns#" term="articles" /><title>Kinect Depth and Real-world distance</title><content type="html">Here is an interesting &lt;a href="http://mathnathan.com/2011/02/03/depthvsdistance/"&gt;link &lt;/a&gt;where the author compares real world distance with the distance measured with Kinect.&lt;br /&gt;
&lt;br /&gt;
My friend and colleague&amp;nbsp;Sriram,&amp;nbsp;is also working in a similar area. I think we can expect important posts regarding that on&amp;nbsp;&lt;a href="http://worldofcameras.wordpress.com/"&gt;http://worldofcameras.wordpress.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-5335136569679893371?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Zv9Etuyyvsv6Z5rIeD5dFkMYcRo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zv9Etuyyvsv6Z5rIeD5dFkMYcRo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Zv9Etuyyvsv6Z5rIeD5dFkMYcRo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zv9Etuyyvsv6Z5rIeD5dFkMYcRo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/BtCV7Gy4Dls" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/5335136569679893371/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/10/kinect-depth-and-real-world-distance.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/5335136569679893371?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/5335136569679893371?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/BtCV7Gy4Dls/kinect-depth-and-real-world-distance.html" title="Kinect Depth and Real-world distance" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/10/kinect-depth-and-real-world-distance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAFQH8yfyp7ImA9WhRRFUo.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-6804602941830069049</id><published>2011-10-14T09:40:00.000-04:00</published><updated>2011-11-29T08:51:51.197-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-29T08:51:51.197-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="c++" /><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenCV" /><category scheme="http://www.blogger.com/atom/ns#" term="Image" /><title>Image Overlap in C++</title><content type="html">In this post we see on how to do Image Overlay/Overlap in C++. It is very simple in OpenCV with the use of &lt;i&gt;addweighted&lt;/i&gt; function.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: #424242; color: #cdcdcd; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.developerstation.org/search/label/OpenCV" style="color: #d58d00; text-decoration: underline;"&gt;Btw, My other programs in OpenCV will be posted here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Checkout the program:&lt;br /&gt;
&lt;script class="brush: cpp" type="syntaxhighlighter"&gt;
#include "highgui.h"
#include "cv.h"
#include &lt;iostream&gt;
#include "cvaux.h"


using namespace std;
using namespace cv;


int main(int argc, char *argv[])
{
 
    // read image 1
    Mat src1 = imread(argv[1],1);
    
    // read image 2
    Mat src2 = imread(argv[2],1);

    // initialize ROI
    Rect roi(84,312, 100, 100);
    
    // Apparently no copy of data involved
    Mat src3 = Mat(src1, roi); 
    
    //void addWeighted(const Mat&amp; src1, double alpha, const Mat&amp; src2, double beta, double gamma, Mat&amp; dst);
    addWeighted(src3, 0.3f, src2, 1.0f, 0, src3);
    
    // you can play around with the alpha, beta, gamma values to see various variations of the result
    
    // you can use src1 directly and forget about src3.

    imshow("img1.jpg",src1);
    imshow("img2.jpg",src2);
    imshow("img3.jpg",src3);
    
    waitKey(0);
    return EXIT_SUCCESS;

}
&lt;/script&gt;
&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-Tge-pqiE5Ow/Tpg6vjFBpDI/AAAAAAAABRA/aprSqMJ_XGE/s1600/Screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-Tge-pqiE5Ow/Tpg6vjFBpDI/AAAAAAAABRA/aprSqMJ_XGE/s320/Screenshot.png" width="314" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
I actually looked at &lt;a href="http://www.aishack.in/2010/07/transparent-image-overlays-in-opencv/"&gt;this&lt;/a&gt; reference, but realized there is a simpler way to it later instead of playing around with Pixels. So, I'm putting up this post.&lt;/div&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-6804602941830069049?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ADllAbB9LxnVazwQqz2Uvdz6X2Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ADllAbB9LxnVazwQqz2Uvdz6X2Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ADllAbB9LxnVazwQqz2Uvdz6X2Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ADllAbB9LxnVazwQqz2Uvdz6X2Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/ytvXi83QnHg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/6804602941830069049/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/10/image-overlap-in-c.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/6804602941830069049?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/6804602941830069049?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/ytvXi83QnHg/image-overlap-in-c.html" title="Image Overlap in C++" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-Tge-pqiE5Ow/Tpg6vjFBpDI/AAAAAAAABRA/aprSqMJ_XGE/s72-c/Screenshot.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/10/image-overlap-in-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4MRnkyfSp7ImA9WhRQGEQ.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-2516613391822766431</id><published>2011-10-05T15:43:00.001-04:00</published><updated>2011-12-14T16:43:07.795-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-14T16:43:07.795-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="general tips" /><category scheme="http://www.blogger.com/atom/ns#" term="articles" /><title>Science and Computer Simulation</title><content type="html">Here is an interesting link which tries to describe analogy between Science/Scientific Experiments and Computer Simulation/Programming.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com/Introduction-Computer-Simulation-Methods-Applications/dp/0805377581"&gt;An Introduction to Computer Simulation Methods&lt;/a&gt;:&amp;nbsp;Amazon Book&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sip.clarku.edu/3e/"&gt;Sample Chapters&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://introcs.cs.princeton.edu/java/90scientific/"&gt;Scientific Programming in Java&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;
I'm glad, someone author wrote it in form of a book (first.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-2516613391822766431?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MdQuSZ6BOJPADuALoQ6YfoGZ0Q4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MdQuSZ6BOJPADuALoQ6YfoGZ0Q4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MdQuSZ6BOJPADuALoQ6YfoGZ0Q4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MdQuSZ6BOJPADuALoQ6YfoGZ0Q4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/Ts--2LI6eZs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/2516613391822766431/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/10/science-and-computer-simulation.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/2516613391822766431?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/2516613391822766431?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/Ts--2LI6eZs/science-and-computer-simulation.html" title="Science and Computer Simulation" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/10/science-and-computer-simulation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8HQ3s-fSp7ImA9WhdUF0o.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-6825255323165761001</id><published>2011-10-04T21:07:00.000-04:00</published><updated>2011-10-04T21:07:12.555-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T21:07:12.555-04:00</app:edited><title>Interesting Papers in Distributed Camera Networks</title><content type="html">I have read these papers published in the field Camera Networks recently (which I found interesting):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://nesl.ee.ucla.edu/fw/documents/conference/2011/Balani-secon.pdf"&gt;Distributed Coordination for Fast Iterative&amp;nbsp;Optimization in Wireless Sensor/Actuator Networks&lt;/a&gt;: Proposed algorithm talks about how wireless sensors come to consensus on an issue in a Fast manner. How does this compare to other methods. (optimzation problem).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=5206773&amp;amp;tag=1"&gt;Distributed Multi-Target Tracking In A Self-Configuring Camera Network&lt;/a&gt;: Talks about a modified Distributed Kalman filter that is used for tracking in Smart Cameras.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://nesl.ee.ucla.edu/document/show/357"&gt;Programming Support for Distributed Optimization and Control in Cyber-Physical Systems&lt;/a&gt;: Talks about issues regarding programming support for distributed shared memory architecture.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cs.binghamton.edu/~vmunish1/papers/munishwar10icdsc.pdf"&gt;Scalable Target Coverage in Smart Camera Networks&lt;/a&gt;: With only Pan changing in a PTZ camera, talks about Camera Coverage problem (which is an optimization problem). Talks about impact of proposed algorithm with changes in density of sensors/cameras, number of targets, etc.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-6825255323165761001?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0QMj96VnLiHh7IYk74KFJ_gcCx8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0QMj96VnLiHh7IYk74KFJ_gcCx8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0QMj96VnLiHh7IYk74KFJ_gcCx8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0QMj96VnLiHh7IYk74KFJ_gcCx8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/vmmrTszIW4I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/6825255323165761001/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/10/interesting-papers-in-distributed.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/6825255323165761001?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/6825255323165761001?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/vmmrTszIW4I/interesting-papers-in-distributed.html" title="Interesting Papers in Distributed Camera Networks" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/10/interesting-papers-in-distributed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUFQHo7fip7ImA9WhdVFE8.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-4628068958696673072</id><published>2011-09-19T06:13:00.000-04:00</published><updated>2011-09-19T06:13:31.406-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-19T06:13:31.406-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="sales force" /><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Computing" /><title>Interesting talk</title><content type="html">&lt;iframe allowfullscreen="" frameborder="0" height="425" src="http://www.youtube.com/embed/JDl5hb0XbfY" width="450"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-4628068958696673072?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ykMFYWjBXx9vxd1x2ZVg-KynhyY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ykMFYWjBXx9vxd1x2ZVg-KynhyY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ykMFYWjBXx9vxd1x2ZVg-KynhyY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ykMFYWjBXx9vxd1x2ZVg-KynhyY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/g1MSKvhjC6c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/4628068958696673072/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/09/interesting-talk.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/4628068958696673072?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/4628068958696673072?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/g1MSKvhjC6c/interesting-talk.html" title="Interesting talk" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/JDl5hb0XbfY/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/09/interesting-talk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cMRn45eCp7ImA9WhdWEk4.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-470931901630889354</id><published>2011-09-05T09:58:00.000-04:00</published><updated>2011-09-05T09:58:07.020-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-05T09:58:07.020-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="computer vision basics" /><title>Color spaces in Vision</title><content type="html">Here is an interesting article that talks about the pros and cons of using a specific color space for &lt;a href="http://chipsight.com/color-space-for-embedded-vision/"&gt;http://chipsight.com/color-space-for-embedded-vision/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
It talks about YCrCb, Lab, RGB, Normalized RGB,YUV, HSV, other color spaces and their pros and cons with respect to each other.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-470931901630889354?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LvucxvftuWk0xqn2Hry-7PE7w2I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LvucxvftuWk0xqn2Hry-7PE7w2I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LvucxvftuWk0xqn2Hry-7PE7w2I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LvucxvftuWk0xqn2Hry-7PE7w2I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/eh_QNXlw5NM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/470931901630889354/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/09/color-spaces-in-vision.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/470931901630889354?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/470931901630889354?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/eh_QNXlw5NM/color-spaces-in-vision.html" title="Color spaces in Vision" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/09/color-spaces-in-vision.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkENSHc4eCp7ImA9WhRQE00.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-117853100243949795</id><published>2011-09-01T21:05:00.001-04:00</published><updated>2011-12-07T20:44:59.930-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-07T20:44:59.930-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="computer vision basics" /><title>Kalman Filter for Dummies</title><content type="html">I've been reading about Kalman filter and its application in Tracking. &lt;br /&gt;
&lt;br /&gt;
For those who are finding Kalman Filter tutorials, even the wikipedia page for Kalman Filter highly confusing might just find these links comparatively easy to understand.&lt;br /&gt;
&lt;br /&gt;
These tutorials help to understand the basic idea of Kalman Filter, why it is applied in Vision problems, etc:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://bilgin.esme.org/BitsBytes/KalmanFilterforDummies.aspx"&gt;Kalman Filter for dummies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdf"&gt;Introduction to Kalman Filter&lt;/a&gt; (includes basic probability concepts, etc).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.njfunk.com/research/courses/652-probability-report.pdf"&gt;A Study of the Kalman Filter applied to Visual Tracking.&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-117853100243949795?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/m2t_270wE-C8VL5-xmLrw5irVyw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m2t_270wE-C8VL5-xmLrw5irVyw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/m2t_270wE-C8VL5-xmLrw5irVyw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/m2t_270wE-C8VL5-xmLrw5irVyw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/PnYjZMEKB6I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/117853100243949795/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/09/kalman-filter-for-dummies-tutorials.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/117853100243949795?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/117853100243949795?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/PnYjZMEKB6I/kalman-filter-for-dummies-tutorials.html" title="Kalman Filter for Dummies" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/09/kalman-filter-for-dummies-tutorials.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIDRnc8eSp7ImA9WhRQGE8.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-7874908763110411703</id><published>2011-08-17T02:32:00.000-04:00</published><updated>2011-12-13T20:02:57.971-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-13T20:02:57.971-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenCV" /><title>OpenCV performance tests</title><content type="html">This is a &lt;a href="http://www.shervinemami.info/timingTests.html"&gt;good article&lt;/a&gt; comparing the performance of common tasks on different versions of OpenCV. Newer version doesn't necessarily mean that it is better in performance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is another link that talks about&amp;nbsp;comparison&amp;nbsp;of &lt;a href="http://nghiaho.com/?p=954"&gt;OpenCV with other programming frameworks.&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-7874908763110411703?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8HDY3HQpriVhyhybpdXSwx6X2Zk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8HDY3HQpriVhyhybpdXSwx6X2Zk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8HDY3HQpriVhyhybpdXSwx6X2Zk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8HDY3HQpriVhyhybpdXSwx6X2Zk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/J12NVRFgbes" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/7874908763110411703/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/08/opencv-performance-tests.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/7874908763110411703?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/7874908763110411703?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/J12NVRFgbes/opencv-performance-tests.html" title="OpenCV performance tests" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/08/opencv-performance-tests.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAMRnwyeSp7ImA9WhRQEEU.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-7469144848804917485</id><published>2011-08-14T18:58:00.003-04:00</published><updated>2011-12-05T06:16:27.291-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-05T06:16:27.291-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="NoSQL" /><category scheme="http://www.blogger.com/atom/ns#" term="database" /><title>A Simple Read/Write Example using Cassandra and Java</title><content type="html">In this post, we take a look at basic CRUD (Create Read Update Delete) operations on Cassandra database using Java JDBC.&lt;br /&gt;
&lt;br /&gt;
We only use Eclipse IDE. This example was tested in Windows 7 Operating System.&lt;br /&gt;
&lt;br /&gt;
To find out more about NoSQL databases, look &lt;a href="http://nosql-database.org/"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Cassandra is an open source distributed database management system developed by Apache Software Foundation. It was designed to handle very large amounts of data spread out across many commodity servers while providing a highly available service with no single point of failure. &lt;br /&gt;
Popular user of Cassandra is Facebook&lt;br /&gt;
&lt;br /&gt;
To find out more on Cassandra, refer its home site &lt;a href="http://cassandra.apache.org/"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Download and Install Cassandra from &lt;a href="http://cassandra.apache.org/download/"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Extract the files.&lt;/li&gt;
&lt;li&gt;Setup the following Environment Variables.&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;JAVA_HOME (Give the link to the jre folder where java is installed)&lt;/li&gt;
&lt;li&gt;CASSANDRA_HOME (Give the link to the cassandra folder where the files are extracted)&lt;/li&gt;
&lt;/ul&gt;&lt;li&gt;Go to the location where you extracted and then into the "~/apache-cassandra-0.6.6/bin" folder and open 'cassandra-cli.bat' file using any text editor &lt;/li&gt;
&lt;li&gt;Replace Line 21 "if NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%CD%" with     "if NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%~dp0.."&lt;br /&gt;
Now save the file after editing the line.  &lt;/li&gt;
&lt;li&gt;Now open the command prompt and goto "~/apache-cassandra-0.6.6/bin&amp;gt;" folder and type the following command '.\cassandra.bat'. This starts the server.&lt;/li&gt;
&lt;li&gt;Now open another command prompt and goto "~/apache-cassandra-0.6.6/bin&amp;gt;" folder and run '.\cassandra-cli.bat'. This is the UI for the database&lt;/li&gt;
&lt;li&gt;Connect to the server by typing the command 'connect localhost/9160'. &lt;/li&gt;
Here, type "Create Keyspace AuthDB ;" This creates a cluster (i.e., database)
&lt;li&gt;Here, type "Create Column Family AuthCollection ;" This creates a column family (i.e., table) &lt;/li&gt;
&lt;li&gt;There are certain jar files needed which are available in the Project Dump which is available for download below. It is present in the folder titled 'JarFiles' in the Project Directory.&lt;/li&gt;
&lt;li&gt;Be sure to add these jar files to the class path.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
The code which performs all the CRUD operations is as follows.&lt;br /&gt;
&lt;br /&gt;
&lt;script class="brush: java" type="syntaxhighlighter"&gt;
package com.examples.cassandra;

import me.prettyprint.cassandra.serializers.StringSerializer;
import me.prettyprint.hector.api.Cluster;
import me.prettyprint.hector.api.Keyspace;
import me.prettyprint.hector.api.beans.ColumnSlice;
import me.prettyprint.hector.api.beans.Rows;
import me.prettyprint.hector.api.factory.HFactory;
import me.prettyprint.hector.api.mutation.Mutator;
import me.prettyprint.hector.api.query.MultigetSliceQuery;
import me.prettyprint.hector.api.query.QueryResult;
import me.prettyprint.hector.api.query.SliceQuery;

public class CassandraExample {

 //The string serializer translates the byte[] to and from String using utf-8 encoding
    private static StringSerializer stringSerializer = StringSerializer.get();
 
    public static void insertData() {
     try {
       //Create a cluster object from your existing Cassandra cluster
            Cluster cluster = HFactory.getOrCreateCluster("Test Cluster", "localhost:9160");
            
            //Create a keyspace object from the existing keyspace we created using CLI
            Keyspace keyspace = HFactory.createKeyspace("AuthDB", cluster);
            
            //Create a mutator object for this keyspace using utf-8 encoding
            Mutator&lt;string&gt; mutator = HFactory.createMutator(keyspace, stringSerializer);
      
            //Use the mutator object to insert a column and value pair to an existing key
            mutator.insert("sample", "authCollection", HFactory.createStringColumn("username", "admin"));
            mutator.insert("sample", "authCollection", HFactory.createStringColumn("password", "admin"));
            
            System.out.println("Data Inserted");
            System.out.println();
     } catch (Exception ex) {
      System.out.println("Error encountered while inserting data!!");
      ex.printStackTrace() ;
     }
    }
    
    public static void retrieveData() {
     try {
      //Create a cluster object from your existing Cassandra cluster
            Cluster cluster = HFactory.getOrCreateCluster("Test Cluster", "localhost:9160");
            
            //Create a keyspace object from the existing keyspace we created using CLI
            Keyspace keyspace = HFactory.createKeyspace("AuthDB", cluster);
      SliceQuery&lt;String, String, String&gt; sliceQuery = HFactory.createSliceQuery(keyspace, stringSerializer, stringSerializer, stringSerializer);
            sliceQuery.setColumnFamily("authCollection").setKey("sample");
            sliceQuery.setRange("", "", false, 4);
            
            QueryResult&lt;ColumnSlice&lt;String, String&gt;&gt; result = sliceQuery.execute(); 
            System.out.println("\nInserted data is as follows:\n" + result.get());
      System.out.println();
     } catch (Exception ex) {
      System.out.println("Error encountered while retrieving data!!");
      ex.printStackTrace() ;
     }
    }
    
    public static void updateData() {
     try {

      //Create a cluster object from your existing Cassandra cluster
            Cluster cluster = HFactory.getOrCreateCluster("Test Sample", "localhost:9160");
            
            //Create a keyspace object from the existing keyspace we created using CLI
            Keyspace keyspace = HFactory.createKeyspace("AuthDB", cluster);
            
          //Create a mutator object for this keyspace using utf-8 encoding
            Mutator&lt;string&gt; mutator = HFactory.createMutator(keyspace, stringSerializer);
            
            //Use the mutator object to update a column and value pair to an existing key
            mutator.insert("sample", "authCollection", HFactory.createStringColumn("username", "administrator"));
            
            //Check if data is updated
            MultigetSliceQuery&lt;String, String, String&gt; multigetSliceQuery = HFactory.createMultigetSliceQuery(keyspace, stringSerializer, stringSerializer, stringSerializer);
            multigetSliceQuery.setColumnFamily("authCollection");
            multigetSliceQuery.setKeys("sample");
        
            //The 3rd parameter returns the columns in reverse order if true
            //The 4th parameter in setRange determines the maximum number of columns returned per key
            multigetSliceQuery.setRange("username", "", false, 1);
            QueryResult&lt;Rows&lt;String, String, String&gt;&gt; result = multigetSliceQuery.execute();
            System.out.println("Updated data..." +result.get());
      
     } catch (Exception ex) {
      System.out.println("Error encountered while updating data!!");
      ex.printStackTrace() ;
     }
    }

    public static void deleteData() {
     try {
    
      //Create a cluster object from your existing Cassandra cluster
            Cluster cluster = HFactory.getOrCreateCluster("Test Cluster", "localhost:9160");
            
            //Create a keyspace object from the existing keyspace we created using CLI
            Keyspace keyspace = HFactory.createKeyspace("AuthDB", cluster);
            
          //Create a mutator object for this keyspace using utf-8 encoding
            Mutator&lt;string&gt; mutator = HFactory.createMutator(keyspace, stringSerializer);
            
            //Use the mutator object to delete row
            mutator.delete("sample", "authCollection",null, stringSerializer);
            
            System.out.println("Data Deleted!!");
            
            //try to retrieve data after deleting
            SliceQuery&lt;String, String, String&gt; sliceQuery = HFactory.createSliceQuery(keyspace, stringSerializer, stringSerializer, stringSerializer);
            sliceQuery.setColumnFamily("authCollection").setKey("sample");
            sliceQuery.setRange("", "", false, 4);
            
            QueryResult&lt;ColumnSlice&lt;String, String&gt;&gt; result = sliceQuery.execute(); 
            System.out.println("\nTrying to Retrieve data after deleting the key 'sample':\n" + result.get());
            
            //close connection
            cluster.getConnectionManager().shutdown();
    
  } catch (Exception ex) {
   System.out.println("Error encountered while deleting data!!");
   ex.printStackTrace() ;
  }
 }
    
    
 public static void main(String[] args) {
  
  insertData() ;
  retrieveData() ;
  updateData() ;
  deleteData() ;
        
 }
}
&lt;/script&gt;&lt;br /&gt;
The screen shot of the output is as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-FxU12x6u9RM/TkhNUafVIyI/AAAAAAAAEUI/EnVeMdiI29A/s1600/Cassandra-JDBC-Output.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://1.bp.blogspot.com/-FxU12x6u9RM/TkhNUafVIyI/AAAAAAAAEUI/EnVeMdiI29A/s400/Cassandra-JDBC-Output.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
This code is available for download along with the entire project directory &lt;a href="https://skydrive.live.com/redir.aspx?cid=1a9ed2fabed2890a&amp;amp;resid=1A9ED2FABED2890A!120"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-7469144848804917485?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0KXI2cdZp7NCL7bKx2wo11voWyk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0KXI2cdZp7NCL7bKx2wo11voWyk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0KXI2cdZp7NCL7bKx2wo11voWyk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0KXI2cdZp7NCL7bKx2wo11voWyk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/25KH1RXUerg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/7469144848804917485/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/08/simple-readwrite-example-using.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/7469144848804917485?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/7469144848804917485?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/25KH1RXUerg/simple-readwrite-example-using.html" title="A Simple Read/Write Example using Cassandra and Java" /><author><name>Sri Ram</name><uri>http://www.blogger.com/profile/03691912986967234191</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://2.bp.blogspot.com/_V159uR8bKIs/S5IJS0HazlI/AAAAAAAAApc/Kh-bq_knu_0/S220/IMG_0313.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-FxU12x6u9RM/TkhNUafVIyI/AAAAAAAAEUI/EnVeMdiI29A/s72-c/Cassandra-JDBC-Output.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/08/simple-readwrite-example-using.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUENQX84eCp7ImA9WhdUEkg.&quot;"><id>tag:blogger.com,1999:blog-2771978873030185743.post-5720726119597826506</id><published>2011-08-03T15:17:00.003-04:00</published><updated>2011-09-28T20:54:50.130-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-28T20:54:50.130-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="computer vision" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenCV" /><title>OpenCV ROS tutorial</title><content type="html">I recently realized that OpenCV tutorials at &lt;a href="http://www.ros.org/wiki/"&gt;ROS&lt;/a&gt; website is&lt;b&gt; more useful&lt;/b&gt; than&amp;nbsp;any others&amp;nbsp;available out there.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #cdcdcd; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"&gt;&lt;a href="http://www.developerstation.org/search/label/OpenCV" style="color: #d58d00; text-decoration: underline;"&gt;Btw, My other programs in OpenCV will be posted here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
You can download it and other related stuff (cheatsheet, etc) at&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://code.ros.org/trac/opencv/browser/trunk/opencv/doc?rev=5763"&gt;https://code.ros.org/trac/opencv/browser/trunk/opencv/doc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://code.ros.org/trac/opencv/browser/trunk/opencv/doc/opencv_user.pdf?rev=5763"&gt;https://code.ros.org/trac/opencv/browser/trunk/opencv/doc/opencv_user.pdf&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2771978873030185743-5720726119597826506?l=www.developerstation.org' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OOE72tsTX2K_m6QO4U1sR2lwStU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OOE72tsTX2K_m6QO4U1sR2lwStU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OOE72tsTX2K_m6QO4U1sR2lwStU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OOE72tsTX2K_m6QO4U1sR2lwStU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/DeveloperStation/~4/LiliHPJduC8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.developerstation.org/feeds/5720726119597826506/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.developerstation.org/2011/08/opencv-ros-tutorial.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/5720726119597826506?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2771978873030185743/posts/default/5720726119597826506?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DeveloperStation/~3/LiliHPJduC8/opencv-ros-tutorial.html" title="OpenCV ROS tutorial" /><author><name>Rahul Kavi</name><uri>https://profiles.google.com/111580649069209272397</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-v5PlwhcbkCU/AAAAAAAAAAI/AAAAAAAABYQ/4I2krOd_IBc/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://www.developerstation.org/2011/08/opencv-ros-tutorial.html</feedburner:origLink></entry></feed>

