Exemplo n.º 1
0
    public static bool SetBlur(this Camera camera, float value, float duration = 0f)
    {
        GaussBlur blur = camera.GetComponent <GaussBlur>();

        if (blur == null)
        {
            return(false);
        }
        blur.SetEffectScale(value, duration);
        return(true);
    }
Exemplo n.º 2
0
        private void Draw(Bitmap bitmap, Func <float, Image> temp)
        {
            var w             = (float)bitmap.Width / 2;
            var h             = (float)bitmap.Height / 2;
            var r             = Math.Sqrt(w * w + h * h);
            var уголЦентраРад = Math.Atan2(h, w);

            using (var graphics = CreateGraphics(bitmap))
            {
                graphics.Clear(Color.FromArgb(0, 0, 0, 0));

                for (var i = 0; i < КоличествоКопий; i++)
                {
                    GaussBlur.Smooth(bitmap, Сглаживание);

                    var angle    = (float)i / КоличествоКопий;
                    var a        = НачальныйУгол + angle * (КонечныйУгол - НачальныйУгол);
                    var уголРад  = (float)(2 * Math.PI * a);
                    var уголГрад = 360 * a;

                    OnMessage(Math.Round(уголГрад) + "°");

                    var dx = r * Math.Cos(уголРад + уголЦентраРад);
                    var dy = r * Math.Sin(уголРад + уголЦентраРад);
                    graphics.TranslateTransform(w - (float)dx, h - (float)dy);

                    graphics.RotateTransform(уголГрад);

                    graphics.DrawImageUnscaled(temp(angle), 0, 0);
                    graphics.ResetTransform();

                    OnPreview();

                    var progressEventArgs = new ProgressEventArgs(i, КоличествоКопий);
                    OnProgress(progressEventArgs);
                    if (progressEventArgs.Stop)
                    {
                        break;
                    }
                }
            }
        }
Exemplo n.º 3
0
        unsafe public GamePostRenderer(RenderSystem rs, RtsCamera camera)
        {
            this.factory = rs.ObjectFactory;

            this.renderSys = rs;
            this.camera    = camera;

            compEff      = new Composite(rs);
            gaussBlur    = new GaussBlur(rs);
            edgeEff      = new EdgeDetect(rs);
            depthViewEff = new DepthView(rs);

            vtxDecl = factory.CreateVertexDeclaration(RectVertex.Elements);

            whitePixel = factory.CreateTexture(1, 1, 1, TextureUsage.StaticWriteOnly, ImagePixelFormat.A8R8G8B8);
            *(uint *)whitePixel.Lock(0, LockMode.None).Pointer.ToPointer() = 0xffffffff;
            whitePixel.Unlock(0);

            LoadUnmanagedResources();
        }
Exemplo n.º 4
0
        public static short[,] Apply(CTSliceInfo ct, GaussBlur gb)
        {
            short[,] hmap = ct.HounsfieldPixelBuffer;

            int nr = ct.RowCount;
            int nc = ct.ColumnCount;

            int br = gb.br;
            int bc = gb.bc;

            float[,] blur = gb.blur;

            short[,] bm = new short[nr, nc];
            int l = bm.Length;
            Array.Clear(bm, 0, bm.Length);

            for (int r = br; r != nr-br; ++r)
            {
                for (int c = bc; c != nc-bc; ++c)
                {
                    float s = 0.0f;

                    for (int ir = -br; ir <= br; ++ir)
                    {
                        int sr = r + ir;
                        for (int ic = -bc; ic <= bc; ++ic)
                        {
                            int sc = c + ic;

                            s += (float)hmap[sr, sc] * blur[ir + br, ic + bc];
                        }
                    }

                    bm[r, c] = (short)(s + 0.5f);
                }
            }

            return bm;
        }
Exemplo n.º 5
0
        private void ButtonLungs_Click(object sender, RoutedEventArgs e)
        {
            bool rc = _scol.BuildSortedSlicesArray();

            if (!rc)
            {
                System.Windows.MessageBox.Show("There are skips in CTs!");
                return;
            }

            CTSliceInfo[] slices = _scol.Slices;

            // Step 1: find the couch
            int sr = SelectStartSlice(slices);

            CTSliceInfo ct = slices[sr];

            int sc       = Couch.DetectCouchInOneSlice(ct.HounsfieldPixelBuffer, ct.RowCount, ct.ColumnCount);
            int scBefore = Couch.DetectCouchInOneSlice(slices[sr + 10].HounsfieldPixelBuffer, slices[sr + 10].RowCount, slices[sr + 10].ColumnCount);
            int scAfter  = Couch.DetectCouchInOneSlice(slices[sr - 10].HounsfieldPixelBuffer, slices[sr - 10].RowCount, slices[sr - 10].ColumnCount);

            sc = Math.Max(Math.Max(sc, scBefore), scAfter);

            // Step 2: Gaussian blur

            GaussBlur gb = new GaussBlur((float)ct.PixelSpacing_X, (float)ct.PixelSpacing_X, 5);

            for (int k = 0; k != slices.Length; ++k)
            {
                ct          = slices[k];
                short[,] bm = CTSliceHelpers.Apply(ct, gb);
                ct.HounsfieldPixelBuffer = bm;
            }

            // Step 3: clear below the couch
            for (int k = 0; k != slices.Length; ++k)
            {
                ct = slices[k];

                short[,] hb = ct.HounsfieldPixelBuffer;

                for (int r = ct.RowCount - 1; r > sc; --r)
                {
                    for (int c = 0; c != ct.ColumnCount; ++c)
                    {
                        hb[r, c] = -1024;
                    }
                }
            }

            // Step 4: gray level thresholding
            for (int k = 0; k != slices.Length; ++k)
            {
                ct = slices[k];

                Couch.GLThresholding(ct, sc, -499, 0, -499);
            }

            // Step 5: Flool fill
            for (int k = 0; k != slices.Length; ++k)
            {
                ct = slices[k];

                short[,] ret = Couch.FloodFill(ct.HounsfieldPixelBuffer, ct.RowCount, ct.ColumnCount,
                                               3, 3, -499, 0);
                ct.HounsfieldPixelBuffer = ret;
            }

            // Step 6: Contours via Moore Neighbour
            for (int k = slices.Length - 1; k >= slices.Length - 2; --k)
            {
                ct = slices[k];
                int nr = ct.RowCount;
                int nc = ct.ColumnCount;

                int    z  = ct.SliceLoc;
                double zz = ct.UpperLeft_Z;

                short[,] bm = ct.HounsfieldPixelBuffer;

                bool[,] image = new bool[nr, nc];

                for (int r = 0; r != nr; ++r)
                {
                    for (int c = 0; c != nc; ++c)
                    {
                        image[r, c] = false;
                        if (bm[r, c] < 0)
                        {
                            image[r, c] = true;
                        }
                    }
                }

                System.Drawing.Point[] contour = MooreContour.Trace(image, nr, nc);


                foreach (var pt in contour)
                {
                    int r = pt.Y;
                    int c = pt.X;

                    bm[r, c] = 500;
                }
            }
        }