Пример #1
0
		public override void Work()
		{
			progress = 0;

			ICommImage socket = _in[0] as ICommImage;
			IImage[] img = socket.Images;
			IImage[] ret = new IImage[img.Length];

			if(splithalf)
				for(int i=0; i<img.Length; i++)
				{
					ret[i] = SplitHistogram(img[i]);
					progress = (float)i/img.Length;
				}
			else
				for(int i=0; i<img.Length; i++)
				{
					ret[i] = Histogram(img[i]);
					progress = (float)i/img.Length;
				}

			_out = new CommSocket(1);
			_out[0] = new ICommImage(ret, socket.OriginalImages, socket.Categories);

			_workdone = true;
		}
Пример #2
0
        public override void Work()
        {
            progress = 0;

            if (_fl.Count == 0)
            {
                throw new PluginException(Catalog.GetString("No images in list"));
            }

            int i = 0;

            IImage[] imgarray   = new IImage[_fl.Count];
            int[]    categories = new int[_fl.Count];

            foreach (string fn in _fl)
            {
                Gdk.Pixbuf buf = new Gdk.Pixbuf(fn);

                imgarray[i]   = IImage.Create(buf, Utility.IsBW(buf) ? BPP.Grayscale : BPP.RGB);
                categories[i] = i;

                i++;

                progress = (float)i / _fl.Count;
            }

            _out    = new CommSocket(1);
            _out[0] = new ICommImage(imgarray, imgarray, categories);

            _workdone = true;
        }
Пример #3
0
        public override void Work()
        {
            progress = 0;

            ICommImage socket = _in[0] as ICommImage;

            IImage[] img = socket.Images;

            IImage[] res1 = new IImage[img.Length];
            IImage[] res2 = new IImage[img.Length];
            IImage[] res3 = new IImage[img.Length];

            for (int i = 0; i < img.Length; i++)
            {
                IImage[] rgb = Split(img[i]);

                res1[i] = rgb[0];
                res2[i] = rgb[1];
                res3[i] = rgb[2];

                progress = (float)i / img.Length;
            }

            _out    = new CommSocket(3);
            _out[0] = new ICommImage(res1, socket.OriginalImages, socket.Categories);
            _out[1] = new ICommImage(res2, socket.OriginalImages, socket.Categories);
            _out[2] = new ICommImage(res3, socket.OriginalImages, socket.Categories);


            _workdone = true;
        }
Пример #4
0
        public override void Work()
        {
            progress = 0;
            ICommImage socket = _in[0] as ICommImage;

            IImage[] img = socket.Images;
            IImage[] ret = new IImage[img.Length * 2];

            int[]    cat     = new int[img.Length * 2];
            IImage[] origimg = new IImage[img.Length * 2];

            for (int i = 0; i < img.Length; i++)
            {
                ret[i * 2]     = img[i];
                ret[i * 2 + 1] = MirrorImage(img[i]);

                cat[i * 2]     = socket.Category(i);
                cat[i * 2 + 1] = socket.Category(i);

                origimg[i * 2]     = socket.OriginalImage(i);
                origimg[i * 2 + 1] = socket.OriginalImage(i);

                progress = (float)i / img.Length;
            }

            _out    = new CommSocket(1);
            _out[0] = new ICommImage(ret, origimg, cat);

            _workdone = true;
        }
Пример #5
0
        public override void Work()
        {
            ICommImage socket = (ICommImage)_in[0];

            IImage[] img  = socket.Images;
            IImage[] orig = socket.OriginalImages;

            images = new Gdk.Pixbuf[img.Length];
            thumbs = new Gdk.Pixbuf[img.Length];
            cat    = socket.Categories;

            double scale;

            for (int i = 0; i < img.Length; i++)
            {
                IImage _img = new IImage(orig[i].BPP, orig[i].W, orig[i].H, orig[i].Data);

                images[i] = HistogramGraph(img[i]);

                Gdk.Pixbuf pixbuf = _img.CreatePixbuf();

                if (_img.W > _img.H)
                {
                    scale = _img.W / 64.0;
                }
                else
                {
                    scale = _img.H / 64.0;
                }

                thumbs[i] = pixbuf.ScaleSimple(Scale(_img.W, scale), Scale(_img.H, scale), Gdk.InterpType.Bilinear);
            }

            _workdone = true;
        }
Пример #6
0
        public override void Work()
        {
            progress = 0;

            ICommImage socket = _in[0] as ICommImage;

            IImage[] i1 = socket.Images;
            IImage[] i2 = new IImage[i1.Length];

            for (int i = 0; i < i1.Length; i++)
            {
                Gdk.Pixbuf buf = i1[i].CreatePixbuf();

                Gdk.Pixbuf bufout = buf.ScaleSimple(i1[i].W / 2, i1[i].H / 2, mode);

                i2[i] = IImage.Create(bufout, i1[i].BPP);

                progress = (float)i / i1.Length;
            }

            _out    = new CommSocket(1);
            _out[0] = new ICommImage(i2, socket.OriginalImages, socket.Categories);

            _workdone = true;
        }
Пример #7
0
        public override void Work()
        {
            ICommImage socket = _in[0] as ICommImage;

            _out = new CommSocket(1);

            _out[0] = new ICommImage(socket.Images, socket.Images, socket.Categories);

            _workdone = true;
        }
Пример #8
0
        public override void Work()
        {
            tasks.Clear();

            bool MultiThreading = Eithne.Config.Get("engine/blockthreads", false);

            ICommImage socket1 = _in[0] as ICommImage;
            ICommImage socket2 = _in[1] as ICommImage;

            IImage[] img1 = socket1.Images;
            IImage[] img2 = socket2.Images;

            _out = new CommSocket(1);

            IResult[] res = new IResult[img2.Length];

            totalImages = img1.Length * img2.Length;

            if (MultiThreading)
            {
                TaskInfo ti1 = new TaskInfo(res, img1, img2, delta, 0, img2.Length / 2);
                TaskInfo ti2 = new TaskInfo(res, img1, img2, delta, img2.Length / 2, img2.Length);

                tasks.Add(ti1);
                tasks.Add(ti2);

                Thread t1 = new Thread(ti1.TaskWork);
                Thread t2 = new Thread(ti2.TaskWork);

                t1.Start();
                t2.Start();

                t1.Join();
                t2.Join();
            }
            else
            {
                TaskInfo t = new TaskInfo(res, img1, img2, delta, 0, img2.Length);
                tasks.Add(t);
                t.TaskWork();
            }

            _out[0] = new ICommResult(res, 0, socket1.OriginalImages, socket2.OriginalImages,
                                      socket1.Categories, socket2.Categories);

            tasks.Clear();

            _workdone = true;
        }
Пример #9
0
        public override void Work()
        {
            ICommImage socket = _in[0] as ICommImage;

            IImage[] img = socket.Images;
            IImage[] res = new IImage[img.Length];
            _out = new CommSocket(1);

            for (int i = 0; i < img.Length; i++)
            {
                res[i] = Desaturate(img[i]);
            }

            _out[0] = new ICommImage(res, socket.OriginalImages, socket.Categories);

            _workdone = true;
        }
Пример #10
0
        public override void Work()
        {
            progress = 0;

            ICommImage socket = _in[0] as ICommImage;

            IImage[] img = socket.Images;
            IImage[] res = new IImage[img.Length];
            _out = new CommSocket(1);

            for (int i = 0; i < img.Length; i++)
            {
                res[i]   = DCT(img[i]);
                progress = (float)i / img.Length;
            }

            _out[0] = new ICommImage(res, socket.OriginalImages, socket.Categories);

            FFTW.Cleanup();

            _workdone = true;
        }
Пример #11
0
        public override void Work()
        {
            ICommImage socket = (ICommImage)_in[0];

            IImage[] img = socket.Images;

            images = new Gdk.Pixbuf[img.Length];
            thumbs = new Gdk.Pixbuf[img.Length];
            cat    = socket.Categories;

            double scale;

            for (int i = 0; i < img.Length; i++)
            {
                IImage _img = new IImage(img[i].BPP, img[i].W, img[i].H, img[i].Data, invert);
                if (invert)
                {
                    _img.Invert();
                }

                images[i] = _img.CreatePixbuf();

                if (_img.W > _img.H)
                {
                    scale = _img.W / 64.0;
                }
                else
                {
                    scale = _img.H / 64.0;
                }

                thumbs[i] = images[i].ScaleSimple(Scale(_img.W, scale), Scale(_img.H, scale), Gdk.InterpType.Bilinear);
            }

            _workdone = true;
        }
Пример #12
0
        public override void Work()
        {
            taskListMutex.WaitOne();
            tasks.Clear();
            taskListMutex.ReleaseMutex();

            if (cat.Count == 0)
            {
                throw new PluginException(Catalog.GetString("No categories in list"));
            }

            bool MultiThreading = Eithne.Config.Get("engine/blockthreads", false);

            ArrayList test_cl = new ArrayList();
            ArrayList test_il = new ArrayList();

            ArrayList base_cl = new ArrayList();
            ArrayList base_il = new ArrayList();

            for (int i = 0; i < cat.Count; i++)
            {
                foreach (Img img in (cat[i] as Category).Files)
                {
                    if (img.IsTest)
                    {
                        test_cl.Add(i);
                        test_il.Add(img.Name);
                    }
                    else
                    {
                        base_cl.Add(i);
                        base_il.Add(img.Name);
                    }
                }
            }

            if (test_il.Count == 0)
            {
                throw new PluginException(Catalog.GetString("There are no test images selected"));
            }
            if (base_il.Count == 0)
            {
                throw new PluginException(Catalog.GetString("There are no base images selected"));
            }

            int[] test_categories = (int[])test_cl.ToArray(typeof(int));
            int[] base_categories = (int[])base_cl.ToArray(typeof(int));

            IImage[] test_imgarray = new IImage[test_il.Count];
            IImage[] base_imgarray = new IImage[base_il.Count];

            totalImages = test_il.Count + base_il.Count;

            if (MultiThreading)
            {
                // test
                TaskInfo ti1 = new TaskInfo(test_imgarray, test_il, 0, test_il.Count / 2);
                TaskInfo ti2 = new TaskInfo(test_imgarray, test_il, test_il.Count / 2, test_il.Count);

                taskListMutex.WaitOne();
                tasks.Add(ti1);
                tasks.Add(ti2);
                taskListMutex.ReleaseMutex();

                Thread t1 = new Thread(ti1.TaskWork);
                Thread t2 = new Thread(ti2.TaskWork);

                t1.Start();
                t2.Start();

                t1.Join();
                t2.Join();

                int t1progress = ti1.Progress;
                int t2progress = ti2.Progress;

                // base
                ti1 = new TaskInfo(base_imgarray, base_il, 0, base_il.Count / 2, t1progress);
                ti2 = new TaskInfo(base_imgarray, base_il, base_il.Count / 2, base_il.Count, t2progress);

                taskListMutex.WaitOne();
                tasks.Clear();
                tasks.Add(ti1);
                tasks.Add(ti2);
                taskListMutex.ReleaseMutex();

                t1 = new Thread(ti1.TaskWork);
                t2 = new Thread(ti2.TaskWork);

                t1.Start();
                t2.Start();

                t1.Join();
                t2.Join();
            }
            else
            {
                TaskInfo t = new TaskInfo(test_imgarray, test_il, 0, test_il.Count);
                tasks.Add(t);
                t.TaskWork();
                t = new TaskInfo(base_imgarray, base_il, 0, base_il.Count);
                t.TaskWork();
            }

            _out    = new CommSocket(2);
            _out[0] = new ICommImage(base_imgarray, base_imgarray, base_categories);
            _out[1] = new ICommImage(test_imgarray, test_imgarray, test_categories);

            taskListMutex.WaitOne();
            tasks.Clear();
            taskListMutex.ReleaseMutex();

            _workdone = true;
        }