CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 7 of 7

Threaded View

  1. #1
    Join Date
    Sep 2009
    Posts
    17

    Coming up with the histrogram of medical images

    Hi, im doing histogram equalization as my final year project. as for now i need to come up with just the histogram for the image i will be opening. im using mfc and have done a few codes to my project. the recent update was me writing the codes to calculate every pixel's value within the image. so what i want to know now is how do i draw the histogram, ie the values of the intensity corresponding to the total pixel numbers. this is my code below:

    Code:
    //**************************************************************************************//
    
    void CLEO_MedivisionView::OnUpdateToolsHistogram(CCmdUI *pCmdUI)
    {
    	// TODO: Add your command update UI handler code here
    			
    	if (fileopen) {
    		pCmdUI->Enable(true);
    	}
    	else {
    		pCmdUI->Enable(false);
    	}
    }
    void CLEO_MedivisionView::OnToolsHistogram()
    {
    	// TODO: Add your command handler code here
    	int x_tick, y_tick;
    	int j;
    	int a_loop, b_loop;
    	int k, t, f, i;
    	int x, g;
    	int q;
    	unsigned int intMFC;
    	unsigned int intMFC1;
    	unsigned int intMFC2;
    	unsigned short array1[256];
    	char c[10];
    	char p[10];
    	char l[10];
    	CString MFCString;
    										//unsigned short array1[65535];
    	pDC = GetDC();				    	//OnDraw member function
    	hdc = pDC->GetSafeHdc();
    	CPen aPen;
    	aPen.CreatePen(PS_SOLID, 2, RGB(255, 225, 225));
    	CPen* pOldPen = pDC->SelectObject(&aPen);
    
    
        pDC->MoveTo(600,400);  //drawing of x-axis
    	pDC->LineTo(920,400);
    	pDC->MoveTo(920,400);
    	pDC->LineTo(915,405);
    	pDC->MoveTo(920,400);
    	pDC->LineTo(915,395);  //drawing of x-axis
    	
    	x_tick = 600;		   //declaring constants
    	y_tick = 400;
    
    	for(j=1; j<=10; j++)  //control the loop so that it draws ticks every 30 pixels
    	{
    		pDC->MoveTo(x_tick+(j*30),y_tick-5); 
    		pDC->LineTo(x_tick+(j*30),y_tick+5);	
    	}
    	pDC->MoveTo(600,400);    //drawing of y-axis
    	pDC->LineTo(600,80);
    	pDC->MoveTo(600,80);
    	pDC->LineTo(605,85);
    	pDC->MoveTo(600,80);
    	pDC->LineTo(595,85);	 //drawing of y-axis
    
    	for(t=1; t<=10; t++)	 //control the loop so that it draws ticks every 30 pixels
    	{
    		pDC->MoveTo(x_tick-5,y_tick-(t*30)); 
    		pDC->LineTo(x_tick+5,y_tick-(t*30));
    	}
    
    	intensity= "Intensity";	   //labelling of x-axis
    	SetBkColor(hdc, RGB(0, 0, 0));
    	SetTextColor(hdc, RGB(255, 255 ,255 ));
    	TextOut(hdc, 930, 390, LPCTSTR(intensity), 9);
    
    	pixels = "Pixels";	    //labelling of y-axis
    	SetTextColor(hdc, RGB(255, 255 ,255 ));
    	TextOut(hdc, 580, 55, LPCTSTR(pixels), 6); 
    
    	numeric = "0";         //number zero (universal)
    	SetTextColor(hdc, RGB(95, 158, 160));
    	TextOut(hdc, 585, 400, LPCTSTR(numeric),1);
    
        intMFC = 0;			 //declaring constants
    	a_loop = 595;
    
    	for(k=1; k<=5; k++)	 //for every two ticks, draw legend of +52 each time it loops
    	{	
    		intMFC = intMFC+52;
    	    itoa(intMFC,c,10);
    	    CString MFCString;
    	    MFCString = c;
    		if(intMFC<100)	     //if number is XX then just show 2 digits
    		{
    			test = c;
    			SetTextColor(hdc, RGB(95, 158 ,160));
    			TextOut(hdc, a_loop+(k*60), 405, LPCTSTR(test), 2);
    		}
    		else if(intMFC>=100)  //if number is XXX then show 3 digits
    		{
    			test = c;
    			SetTextColor(hdc, RGB(95, 158, 160));
    			TextOut(hdc, a_loop+(k*60), 405, LPCTSTR(test), 3);
    		}
    
    	}
    
    	intMFC1 = 0;			//declaring of constants
    	intMFC2 = 0;
    	b_loop = 392;
    	
    	if (no_of_rows == 256 && no_of_cols == 256)	 // initiate if image its by 256*256
    	{
    		for(f=1; f<=5; f++)		      // for 5-ticks axis
    		{ 
    		intMFC1 = (((256 * 256)/5)+0.3) * f;  // calculate each of the 5 marking is +13107
    	    itoa(intMFC1,p,10);				  
    	    CString MFCString;
    	    MFCString = p;
    
    		test1 = p;
    		SetTextColor(hdc, RGB(95, 158 ,160));
    		TextOut(hdc, 540, b_loop-(f*60), LPCTSTR(test1), 5);	 // type casting
    		}   
    	}
    
    	else if (no_of_rows == 512 && no_of_cols == 512)  // if image is 512*512 run this
    	{
    		for(q=1; q<=5; q++)    // for 5-ticks axis		                   
    		{   
    			intMFC2 = (((512 * 512)/5)+0.8) * q; // to calculate each marking is +52428
    			itoa(intMFC2,l,10);			   
    		
    			MFCString = l;					 
    			if(intMFC2<100000)	//'if' statement used because if digit is less
    				                //than 100000, it shows crap at the last digit position
    			{
    				test2 = l;
    				SetTextColor(hdc, RGB(95, 158 ,160));
    				TextOut(hdc, 540, b_loop-(q*60), LPCTSTR(test2), 5);	
    			}
    			else if(intMFC2>=100000)	//if digit is more or equal to 100000, do this
    			{
    				test2 = l;
    				SetTextColor(hdc, RGB(95, 158, 160));
    				TextOut(hdc, 540, b_loop-(q*60), LPCTSTR(test2),6);
    			}
    		}
    	}
    
    
    	//count pixel intensity
    	if (no_of_rows == 512 && no_of_cols == 512)
    	{
    	//'for' loop couting from 0 to 255 which simply zeros out each element in array1 to prepare the array to do the count of the bytes in the image
    		for (i=0;i<255;i++) 
    		{
    			array1[i]=0;
    		}
    	//'for' loop to loop through the bytes of the image
    		for (i=0; i<262143; i++)
    		{ 
    		array1[image[i]]++;
    		}
    	}
    
    	else if (no_of_rows == 256 && no_of_cols == 256)
    	{
    		for (g=0;g<255;g++)
    		{
    			array1[g]=0;
    		}
    
    		for (g=0;g<65535; g++)
    		{
    			array1[image256[g]]++;
    		}
    	}
    
    }
    image[i] is a variable for 512*512 image and image256[i] is for 256*256 image. pls do help me in this thanks! and i will upload the jpeg of what my project looks like as of now so u wont get lost in what im doing.
    Attached Images Attached Images

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured