Skip to main content

Posts

If you found these codes useful buy me a beer

If you found these codes useful buy me a beer
Recent posts

Results Update Feb 4

getting SURF points of any image

this post uses OPENCV 2.2 and a simple change of the extract feature will allow use on version 2.3 class atsSURF { public:     cv::Mat extractPoints(cv::Mat img)     {         int minHessian = 500;         cv::SurfFeatureDetector detector(minHessian);         std::vector<cv::KeyPoint> keypoints;         detector.detect(img,keypoints,img); //opencv 2.2         //detector.detect(img,keypoints); //opencv 2.3         cv::SurfDescriptorExtractor extractor;         cv::Mat descriptor;         extractor.compute(img,keypoints,descriptor);         thisDescriptor = descriptor;         thisKeypoints = keypoints;         cv::Mat outim = img;         cv::drawKeypoints(img,keypoints,outim,Scalar::all(-1),                                cv::DrawMatchesFlags::DEFAULT);         return outim;     } private:     cv::Mat thisDescriptor;     std::vector<cv::KeyPoint> thisKeypoints; }; to run from the main function int main(int argc, char* argv[]) { char code = (char)-1; atsImages im(&

Entropy and Gini index experiments

Conclusion: 1. Entropy and Gini index are unique when color and shape are different 2. Entropy and Gini Index are unique (Small Difference) Color remains the same but different shape 3. Entropy and Gini Index are unique (smaller difference) Color and shape are the same Area and size Shape and Color are the same, however entropy is unique, Gini Index is even more unique

Blob Detection, Connected Component (Pure Opencv)

Connected-component labeling (alternatively connected-component analysis, blob extraction, region labeling, blob discovery, or region extraction) is an algorithmic application of graph theory, where subsets of connected components are uniquely labeled based on a given heuristic. Connected-component labeling is not to be confused with segmentation. i got the initial code from this URL: http://nghiaho.com/?p=1102 However the code did not compile with my setup of OpenCV 2.2, im guessing it was an older version. so a refactored and corrected the errors to come up with this Class class atsBlobFinder     {     public:         atsBlobFinder()         {         }         ///Original Code by http://nghiaho.com/?p=1102         ///Changed and added commments. Removed Errors         ///works with VS2010 and OpenCV 2.2+         void FindBlobs(const cv::Mat &binary, vector < vector<cv::Point>  > &blobs)         {             blobs.clear();             // Fill the la

Computing Gini Index of an image (measure of Impurity)

Using my previous posts Class file and this reference: http://people.revoledu.com/kardi/tutorial/DecisionTree/how-to-measure-impurity.htm float computeGiniIndex(Mat r, Mat g, Mat b)     {         float giniIndex = 0.0;         float frequency = getFrequencyOfBin(r);         for( int i = 1; i < histSize; i++ )         {             float Hc = abs(getHistogramBinValue(r,i));             giniIndex += Hc*Hc;         }         frequency = getFrequencyOfBin(g);         for( int i = 1; i < histSize; i++ )         {             float Hc = abs(getHistogramBinValue(g,i));             giniIndex += Hc*Hc;         }         frequency = getFrequencyOfBin(b);         for( int i = 1; i < histSize; i++ )         {             float Hc = abs(getHistogramBinValue(b,i));             giniIndex += Hc*Hc;         }         giniIndex = 1 - (giniIndex);         //cout << giniIndex <<endl;         return giniIndex;     }

Computing Entropy of an image (CORRECTED)

entropy is a measure of the uncertainty associated with a random variable. basically i want to get a single value representing the entropy of an image. 1. Assign 255 bins for the range of values between 0-255 2. separate the image into its 3 channels 3. compute histogram for each channel 4. normalize all 3 channels unifirmely 5. for each channel get the bin value (Hc) and use its absolute value (negative log is infinity) 6. compute Hc*log10(Hc) 7. add to entropy and continue with 5 until a single value converges 5. get the frequency of each channel - add all the values of the bin 6. for each bin get a probability - if bin 1 = 20 bin 2 = 30 then frequency is 50 and probability is 20/50 and 30/50 then compute using shannon formula  REFERENCE: http://people.revoledu.com/kardi/tutorial/DecisionTree/how-to-measure-impurity.htm class atsHistogram { public:     cv::Mat DrawHistogram(Mat src)     {         /// Separate the image in 3 places ( R, G and B )