Wikia

Computer vision

Entropy thresholding

Talk0
402pages on
this wiki

Redirected from Entropy Tresholding

Entropy Thresholding is a means of thresholding an image that selects an optimum threshold value by choosing the pixel intensity from the image's histogram that exhibits the maximum entropy over the entire image.

Contents

AlgorithmEdit

C++ codeEdit

ImageSpace ImageSpace::EntropyThreshold(void)
{ 
ImageSpace *ReturnImageSpace = new ImageSpace;
BYTE *b1 = new BYTE[ XMax*YMax ];
 
int ThresholdLevel, *hist; 
double prob[256], Sum_prob_1k = 0, Sum_prob_kl = 0, 
		Sum_prob_ln_1k = 0, Sum_prob_ln_kl = 0, Entropy[256];

           //gets histogram of image
	hist = Histogram();				

           // probability distribution
	for( int i = 0; i< 256; i++)
		prob[i] =  (double) hist[i] / (XMax * YMax); 
	
           // k is trial threshold level
	for( int k = 0; k< 255; k++)		
	{
		Sum_prob_1k = 0; Sum_prob_kl = 0; 
		Sum_prob_ln_1k = 0; Sum_prob_ln_kl = 0;
		     
                   //From 1 to k
		for(i = 1; i < k; i++)			
		{	
							                                                                
                              //Sums probablities to k
			Sum_prob_1k += prob[i];		

                            //Sums prob times Log of prob to k
			if(prob[i]!=0) Sum_prob_ln_1k += (prob[i] * log(prob[i]));
		}
		
		for(i = k; i < 256; i++)		

                          //From k to end
		{								 
                           //Sums prob of k to end
			Sum_prob_kl += prob[i];		

                           //Sums prob times log of prob
		        if(prob[i]!=0) Sum_prob_ln_kl += (prob[i] * log(prob[i]));
		}
		     //Final equation of entropy for each k
		Entropy[k] = log(Sum_prob_1k) + log(Sum_prob_kl)
			- (Sum_prob_ln_1k / Sum_prob_1k)
			- (Sum_prob_ln_kl / Sum_prob_kl);
		     //protects against divide by zero
		if(Entropy[k]<0) Entropy[k]=0;
	}		

	ThresholdLevel = 0;
	for(k = 0; k<256; k++)	//Finds Maximum
		if(Entropy[k] > Entropy[ThresholdLevel]) ThresholdLevel = k;
			//Thresholds there
		cout << "Thresholded at :" << ThresholdLevel << endl;
	for( int y=0; y < YMax; y++ ) for( int x=0; x < XMax; x++ ) 
	    b1[ x + y * XMax ] = ( b0[ x + y * XMax ] > ThresholdLevel ) ? 255 : 0;
	
	ReturnImageSpace->Load(b1);
	IsThreshold = TRUE;

return *ReturnImageSpace;
}

OutputEdit

See alsoEdit

External linksEdit

link MotionDetection link 3D Entropy Bulgarian version

Advertisement | Your ad here

Photos

Add a Photo
91photos on this wiki
See all photos >

Recent Wiki Activity

See more >

Around Wikia's network

Random Wiki