Click here to Skip to main content
15,885,914 members
Articles / Multimedia / GDI+

Computer Vision Applications with C# - Part II

Rate me:
Please Sign up or sign in to vote.
4.94/5 (30 votes)
25 Apr 2009CPOL6 min read 100.4K   9.2K   88  
Applied Computer Vision - Moments.
  • cvmoments.zip
    • AviSequence
      • 0.jpg
      • 1.jpg
      • 10.jpg
      • 100.jpg
      • 101.jpg
      • 102.jpg
      • 103.jpg
      • 104.jpg
      • 105.jpg
      • 106.jpg
      • 107.jpg
      • 108.jpg
      • 109.jpg
      • 11.jpg
      • 110.jpg
      • 111.jpg
      • 112.jpg
      • 113.jpg
      • 114.jpg
      • 115.jpg
      • 116.jpg
      • 117.jpg
      • 118.jpg
      • 119.jpg
      • 12.jpg
      • 120.jpg
      • 121.jpg
      • 122.jpg
      • 123.jpg
      • 124.jpg
      • 125.jpg
      • 126.jpg
      • 127.jpg
      • 128.jpg
      • 129.jpg
      • 13.jpg
      • 130.jpg
      • 131.jpg
      • 132.jpg
      • 133.jpg
      • 134.jpg
      • 135.jpg
      • 136.jpg
      • 137.jpg
      • 138.jpg
      • 139.jpg
      • 14.jpg
      • 140.jpg
      • 141.jpg
      • 142.jpg
      • 143.jpg
      • 144.jpg
      • 145.jpg
      • 146.jpg
      • 147.jpg
      • 148.jpg
      • 149.jpg
      • 15.jpg
      • 150.jpg
      • 151.jpg
      • 152.jpg
      • 153.jpg
      • 154.jpg
      • 155.jpg
      • 156.jpg
      • 157.jpg
      • 158.jpg
      • 159.jpg
      • 16.jpg
      • 160.jpg
      • 161.jpg
      • 162.jpg
      • 163.jpg
      • 164.jpg
      • 165.jpg
      • 166.jpg
      • 167.jpg
      • 168.jpg
      • 169.jpg
      • 17.jpg
      • 170.jpg
      • 171.jpg
      • 172.jpg
      • 173.jpg
      • 174.jpg
      • 175.jpg
      • 176.jpg
      • 177.jpg
      • 178.jpg
      • 179.jpg
      • 18.jpg
      • 180.jpg
      • 181.jpg
      • 182.jpg
      • 183.jpg
      • 184.jpg
      • 185.jpg
      • 186.jpg
      • 187.jpg
      • 188.jpg
      • 189.jpg
      • 19.jpg
      • 190.jpg
      • 191.jpg
      • 192.jpg
      • 193.jpg
      • 194.jpg
      • 195.jpg
      • 196.jpg
      • 197.jpg
      • 198.jpg
      • 199.jpg
      • 2.jpg
      • 20.jpg
      • 200.jpg
      • 201.jpg
      • 202.jpg
      • 203.jpg
      • 204.jpg
      • 205.jpg
      • 206.jpg
      • 207.jpg
      • 208.jpg
      • 209.jpg
      • 21.jpg
      • 210.jpg
      • 211.jpg
      • 212.jpg
      • 213.jpg
      • 214.jpg
      • 215.jpg
      • 216.jpg
      • 217.jpg
      • 218.jpg
      • 219.jpg
      • 22.jpg
      • 220.jpg
      • 221.jpg
      • 222.jpg
      • 223.jpg
      • 224.jpg
      • 225.jpg
      • 226.jpg
      • 227.jpg
      • 228.jpg
      • 229.jpg
      • 23.jpg
      • 230.jpg
      • 231.jpg
      • 232.jpg
      • 233.jpg
      • 234.jpg
      • 235.jpg
      • 236.jpg
      • 237.jpg
      • 238.jpg
      • 239.jpg
      • 24.jpg
      • 240.jpg
      • 241.jpg
      • 242.jpg
      • 243.jpg
      • 244.jpg
      • 245.jpg
      • 246.jpg
      • 247.jpg
      • 248.jpg
      • 249.jpg
      • 25.jpg
      • 250.jpg
      • 251.jpg
      • 252.jpg
      • 253.jpg
      • 254.jpg
      • 255.jpg
      • 256.jpg
      • 257.jpg
      • 258.jpg
      • 259.jpg
      • 26.jpg
      • 260.jpg
      • 261.jpg
      • 262.jpg
      • 263.jpg
      • 264.jpg
      • 265.jpg
      • 266.jpg
      • 267.jpg
      • 268.jpg
      • 269.jpg
      • 27.jpg
      • 270.jpg
      • 271.jpg
      • 272.jpg
      • 273.jpg
      • 274.jpg
      • 275.jpg
      • 276.jpg
      • 277.jpg
      • 278.jpg
      • 279.jpg
      • 28.jpg
      • 280.jpg
      • 281.jpg
      • 282.jpg
      • 283.jpg
      • 284.jpg
      • 285.jpg
      • 286.jpg
      • 287.jpg
      • 288.jpg
      • 289.jpg
      • 29.jpg
      • 290.jpg
      • 291.jpg
      • 292.jpg
      • 293.jpg
      • 294.jpg
      • 295.jpg
      • 296.jpg
      • 297.jpg
      • 298.jpg
      • 299.jpg
      • 3.jpg
      • 30.jpg
      • 300.jpg
      • 301.jpg
      • 302.jpg
      • 303.jpg
      • 304.jpg
      • 305.jpg
      • 306.jpg
      • 307.jpg
      • 308.jpg
      • 309.jpg
      • 31.jpg
      • 310.jpg
      • 311.jpg
      • 312.jpg
      • 313.jpg
      • 314.jpg
      • 315.jpg
      • 316.jpg
      • 317.jpg
      • 318.jpg
      • 319.jpg
      • 32.jpg
      • 320.jpg
      • 321.jpg
      • 322.jpg
      • 323.jpg
      • 324.jpg
      • 325.jpg
      • 326.jpg
      • 327.jpg
      • 328.jpg
      • 329.jpg
      • 33.jpg
      • 330.jpg
      • 331.jpg
      • 332.jpg
      • 333.jpg
      • 334.jpg
      • 335.jpg
      • 336.jpg
      • 337.jpg
      • 338.jpg
      • 339.jpg
      • 34.jpg
      • 340.jpg
      • 341.jpg
      • 342.jpg
      • 343.jpg
      • 344.jpg
      • 345.jpg
      • 346.jpg
      • 347.jpg
      • 348.jpg
      • 349.jpg
      • 35.jpg
      • 350.jpg
      • 351.jpg
      • 352.jpg
      • 353.jpg
      • 354.jpg
      • 355.jpg
      • 356.jpg
      • 357.jpg
      • 358.jpg
      • 359.jpg
      • 36.jpg
      • 360.jpg
      • 361.jpg
      • 362.jpg
      • 363.jpg
      • 364.jpg
      • 365.jpg
      • 366.jpg
      • 367.jpg
      • 368.jpg
      • 369.jpg
      • 37.jpg
      • 370.jpg
      • 371.jpg
      • 372.jpg
      • 373.jpg
      • 374.jpg
      • 375.jpg
      • 376.jpg
      • 377.jpg
      • 378.jpg
      • 379.jpg
      • 38.jpg
      • 380.jpg
      • 381.jpg
      • 382.jpg
      • 383.jpg
      • 384.jpg
      • 385.jpg
      • 386.jpg
      • 387.jpg
      • 388.jpg
      • 389.jpg
      • 39.jpg
      • 390.jpg
      • 391.jpg
      • 392.jpg
      • 393.jpg
      • 394.jpg
      • 395.jpg
      • 396.jpg
      • 397.jpg
      • 398.jpg
      • 399.jpg
      • 4.jpg
      • 40.jpg
      • 400.jpg
      • 401.jpg
      • 402.jpg
      • 403.jpg
      • 404.jpg
      • 405.jpg
      • 406.jpg
      • 407.jpg
      • 408.jpg
      • 409.jpg
      • 41.jpg
      • 410.jpg
      • 411.jpg
      • 412.jpg
      • 413.jpg
      • 414.jpg
      • 415.jpg
      • 416.jpg
      • 417.jpg
      • 418.jpg
      • 419.jpg
      • 42.jpg
      • 420.jpg
      • 421.jpg
      • 422.jpg
      • 423.jpg
      • 424.jpg
      • 425.jpg
      • 426.jpg
      • 427.jpg
      • 428.jpg
      • 429.jpg
      • 43.jpg
      • 430.jpg
      • 431.jpg
      • 432.jpg
      • 433.jpg
      • 434.jpg
      • 435.jpg
      • 436.jpg
      • 437.jpg
      • 438.jpg
      • 439.jpg
      • 44.jpg
      • 440.jpg
      • 441.jpg
      • 442.jpg
      • 443.jpg
      • 444.jpg
      • 445.jpg
      • 446.jpg
      • 447.jpg
      • 448.jpg
      • 449.jpg
      • 45.jpg
      • 450.jpg
      • 451.jpg
      • 452.jpg
      • 453.jpg
      • 454.jpg
      • 455.jpg
      • 456.jpg
      • 457.jpg
      • 458.jpg
      • 459.jpg
      • 46.jpg
      • 460.jpg
      • 461.jpg
      • 462.jpg
      • 463.jpg
      • 464.jpg
      • 465.jpg
      • 466.jpg
      • 467.jpg
      • 468.jpg
      • 469.jpg
      • 47.jpg
      • 470.jpg
      • 471.jpg
      • 472.jpg
      • 473.jpg
      • 474.jpg
      • 475.jpg
      • 476.jpg
      • 477.jpg
      • 478.jpg
      • 479.jpg
      • 48.jpg
      • 480.jpg
      • 481.jpg
      • 482.jpg
      • 483.jpg
      • 484.jpg
      • 485.jpg
      • 486.jpg
      • 487.jpg
      • 488.jpg
      • 489.jpg
      • 49.jpg
      • 490.jpg
      • 491.jpg
      • 492.jpg
      • 493.jpg
      • 494.jpg
      • 495.jpg
      • 496.jpg
      • 497.jpg
      • 498.jpg
      • 499.jpg
      • 5.jpg
      • 50.jpg
      • 500.jpg
      • 501.jpg
      • 502.jpg
      • 503.jpg
      • 504.jpg
      • 505.jpg
      • 506.jpg
      • 507.jpg
      • 508.jpg
      • 509.jpg
      • 51.jpg
      • 510.jpg
      • 511.jpg
      • 512.jpg
      • 513.jpg
      • 514.jpg
      • 515.jpg
      • 516.jpg
      • 517.jpg
      • 518.jpg
      • 519.jpg
      • 52.jpg
      • 520.jpg
      • 521.jpg
      • 522.jpg
      • 523.jpg
      • 524.jpg
      • 525.jpg
      • 526.jpg
      • 527.jpg
      • 528.jpg
      • 529.jpg
      • 53.jpg
      • 530.jpg
      • 531.jpg
      • 532.jpg
      • 533.jpg
      • 534.jpg
      • 535.jpg
      • 536.jpg
      • 537.jpg
      • 538.jpg
      • 539.jpg
      • 54.jpg
      • 540.jpg
      • 541.jpg
      • 542.jpg
      • 543.jpg
      • 544.jpg
      • 545.jpg
      • 546.jpg
      • 547.jpg
      • 548.jpg
      • 549.jpg
      • 55.jpg
      • 550.jpg
      • 551.jpg
      • 552.jpg
      • 553.jpg
      • 554.jpg
      • 555.jpg
      • 556.jpg
      • 557.jpg
      • 558.jpg
      • 559.jpg
      • 56.jpg
      • 560.jpg
      • 561.jpg
      • 562.jpg
      • 563.jpg
      • 564.jpg
      • 565.jpg
      • 566.jpg
      • 567.jpg
      • 568.jpg
      • 569.jpg
      • 57.jpg
      • 570.jpg
      • 571.jpg
      • 572.jpg
      • 573.jpg
      • 574.jpg
      • 575.jpg
      • 576.jpg
      • 577.jpg
      • 578.jpg
      • 579.jpg
      • 58.jpg
      • 580.jpg
      • 581.jpg
      • 582.jpg
      • 583.jpg
      • 584.jpg
      • 585.jpg
      • 586.jpg
      • 587.jpg
      • 588.jpg
      • 589.jpg
      • 59.jpg
      • 590.jpg
      • 591.jpg
      • 592.jpg
      • 593.jpg
      • 594.jpg
      • 595.jpg
      • 596.jpg
      • 597.jpg
      • 598.jpg
      • 599.jpg
      • 6.jpg
      • 60.jpg
      • 600.jpg
      • 61.jpg
      • 62.jpg
      • 63.jpg
      • 64.jpg
      • 65.jpg
      • 66.jpg
      • 67.jpg
      • 68.jpg
      • 69.jpg
      • 7.jpg
      • 70.jpg
      • 71.jpg
      • 72.jpg
      • 73.jpg
      • 74.jpg
      • 75.jpg
      • 76.jpg
      • 77.jpg
      • 78.jpg
      • 79.jpg
      • 8.jpg
      • 80.jpg
      • 81.jpg
      • 82.jpg
      • 83.jpg
      • 84.jpg
      • 85.jpg
      • 86.jpg
      • 87.jpg
      • 88.jpg
      • 89.jpg
      • 9.jpg
      • 90.jpg
      • 91.jpg
      • 92.jpg
      • 93.jpg
      • 94.jpg
      • 95.jpg
      • 96.jpg
      • 97.jpg
      • 98.jpg
      • 99.jpg
    • CVMoments.sln
    • CVMoments
    • ImageProcessor
    • Tracker
    • UIGraphic
��using System;

using System.Drawing;

using System.Drawing.Imaging;

using System.Collections.Generic;

using System.Windows.Forms;



using ImageProcessor;

using UIGraphic;



namespace Tracker

{

	/// <summary>

	/// Summary description for Centroid.

	/// </summary>

	public class Centroid : ITracker

	{	

        public Centroid()

        {

            _imgProc = new Processor(); //create image processor

        }



        public void CreateTargetModel(Bitmap bitmap, int binCountCh1, int binCountCh2, int binCountCh3, Window targetRoi, Window searchRoi)

		{

            _targetRoi = targetRoi;

            _searchRoi = searchRoi;

            

            //Get the required section

            Bitmap cropped = GetImageSection(bitmap, targetRoi);



            //create target histogram

            _hist = _imgProc.Create1DHistogram(cropped, binCountCh1 , binCountCh2, binCountCh3);

		}

                       

		public void Track(Bitmap bitmap, out Window targetRoi, out Window searchRoi)

		{

            //get the required image section

            Bitmap cropped = GetImageSection(bitmap, _searchRoi);

            

            //create backprojection image

            _processedImage = _imgProc.CreateBackprojectionImage(bitmap, _hist, _searchRoi.RegionOfInterest);



            //Find moments of the binary image which was selected

            Bitmap bin = _processedImage.Clone(_searchRoi.RegionOfInterest, _processedImage.PixelFormat);

            _moment = new Moment(bin);



            //Find the centroid in the whole image

            int centreX = 0;

            centreX = _targetRoi.RegionOfInterest.X + (int)(_moment.FirstMomentX / _moment.ZerothMoment);

            int centreY = 0;

            centreY = _targetRoi.RegionOfInterest.Y + (int)(_moment.FirstMomentY / _moment.ZerothMoment);



            //add information

            SaveInformation(centreX, centreY);

            

            //check validity

            if (centreX > 0 && centreY > 0)

            {



                //Move the roi & search window to the new centroid

                _targetRoi.Offset(centreX - _targetRoi.CentreX, centreY - _targetRoi.CentreY);

                _searchRoi.Offset(centreX - _searchRoi.CentreX, centreY - _searchRoi.CentreY);



                _processedImage = Drawer.DrawMoment(_processedImage, _moment, new Point(centreX, centreY));



               } 

            

            targetRoi = _targetRoi;

            searchRoi = _searchRoi;

            

		}



        public Bitmap ProcessedImage

        {

            get { return _processedImage; }

        }



        public Dictionary<string, string> Information

        {

            get { return _moment.Information; }

        }



        private void SaveInformation(int centreX, int centreY)

        {

            _moment.Information.Add("Centroid", "(" + centreX.ToString() + ", " + centreY.ToString() + ")");            

        }



        private Bitmap GetImageSection(Bitmap bmp, Window roi)

        {

            roi.EnsureLimits(); //make sure it is not out of the picture

            return bmp.Clone(roi.RegionOfInterest, bmp.PixelFormat); //select the section            

        }



        private Processor _imgProc = null;

        private Histogram _hist = null;

        private Bitmap _processedImage = null;

        private Window _targetRoi;

        private Window _searchRoi;

        private Moment _moment = null;

    }

}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Australia Australia
I have been in the IT industry since April 1996. My main expertise is in Microsoft space.

Coming from engineering background, any application of programming to engineering and related fields easily excites me. I like to use OO and design patterns and find them very useful.

I have been an avid reader of CodeProject. I decided it was time to make a commitment to make my contribution to the community - so here I am.

My Website: http://www.puresolutions-online.com

Comments and Discussions