Example #1
0
        //------------------------------------------------------------------------------------------------------------------------
        //detects the centre points of image
        //------------------------------------------------------------------------------------------------------------------------
        public int detectBlobCentres(classimage sourceimage, classimage tempimage, int min_volume, ref int average_volume, ref int average_radius, int[,] blob_data, int no_of_angles, classimage colour_image, int[,,] radius_lookup)
        {
            int x,y,no_of_blobs;
            int tx,ty,bx,by,cx,cy;
            long pixels,av_r,av_g,av_b,av_x,av_y,av_vol,av_rad;

            clear();
            tempimage.clear();
            no_of_blobs=0;
            av_vol=0;
            av_rad=0;
            for (x=1;x<width-1;x++)
            {
                for (y=1;y<height-1;y++)
                {
	                if (sourceimage.image[x,y,0]>0)
	                {
		                pixels=0;
	                    av_x=0; av_y=0;
		                av_r=0; av_g=0; av_b=0;
		                tx=x; ty=y; bx=x; by=y;
	                    floodFill(x,y,0,100,100,100,ref tx,ref ty,ref bx,ref by,ref pixels,ref av_r,ref av_g,ref av_b,sourceimage,ref av_x,ref av_y,false,0,tempimage,colour_image);
		                if (pixels>min_volume)
		                {
		                    cx = (int)(av_x / pixels);
		                    cy = (int)(av_y / pixels);
		                    image[cx,cy,0]=255;
		                    image[cx,cy,1]=255;
		                    image[cx,cy,2]=255;
		                    av_vol += pixels;
		                    av_rad += (((bx-tx) + (by-ty))/2);

                            //update blob data
		                    if (no_of_blobs<2000)
		                    {
		                        blob_data[no_of_blobs,0] = (int)pixels;
		                        blob_data[no_of_blobs,1] = cx;
		                        blob_data[no_of_blobs,2] = cy;
		                        blob_data[no_of_blobs,3] = bx-tx;
		                        blob_data[no_of_blobs,4] = by-ty;
			                    blob_data[no_of_blobs,5] = (int)(av_r / pixels);
			                    blob_data[no_of_blobs,6] = (int)(av_g / pixels);
			                    blob_data[no_of_blobs,7] = (int)(av_b / pixels);
                                if (no_of_angles>1) tempimage.getBlobShape(no_of_angles,cx,cy,tx,ty,bx,by,blob_data,no_of_blobs,8,radius_lookup);
		                    }

		                    no_of_blobs++;
		                }
		                tempimage.clearArea(tx,ty,bx,by);
	                }
	            }
            }

            if (no_of_blobs>0)
            {
                average_volume = (int)(av_vol / no_of_blobs);
	            average_radius = (int)(av_rad / no_of_blobs);
            }
            return(no_of_blobs);
        }