コード例 #1
0
        private static void UpdateBKernel(Index2 index,
                                          ArrayView2D <float> candidates,
                                          ArrayView2D <float> psf2,
                                          ArrayView <Pixel> pixel)
        {
            var indexCandidate = index.Add(new Index2(pixel[0].X, pixel[0].Y)).Subtract(psf2.Extent / 2);

            if (index.InBounds(psf2.Extent) & indexCandidate.InBounds(candidates.Extent) & pixel[0].AbsDiff > 0)
            {
                candidates[indexCandidate] -= (psf2[index] * pixel[0].Sign * pixel[0].AbsDiff);
            }
        }
コード例 #2
0
        private static void ShrinkKernel(Index2 index,
                                         ArrayView2D <float> xImage,
                                         ArrayView2D <float> bMap,
                                         ArrayView2D <float> aMap,
                                         ArrayView <float> lambdaAlpha,
                                         ArrayView <Pixel> output)
        {
            if (index.X == 0 & index.Y == 0)
            {
                output[0].AbsDiff = 0;
            }

            if (index.InBounds(xImage.Extent))
            {
                var xOld      = xImage[index];
                var gradient  = bMap[index];
                var lipschitz = aMap[index];
                var lambda    = lambdaAlpha[0];
                var alpha     = lambdaAlpha[1];

                var xNew     = GPUProximalOperator(xOld * lipschitz + gradient, lipschitz, lambda, alpha);
                var xAbsDiff = XMath.Abs(xNew - xOld);
                var xIndex   = index.X;
                var yIndex   = index.Y;
                var sign     = XMath.Sign(xNew - xOld);

                var pix = new Pixel()
                {
                    AbsDiff = xAbsDiff,
                    X       = xIndex,
                    Y       = yIndex,
                    Sign    = sign
                };
                Atomic.MakeAtomic(ref output[0], pix, new MaxPixelOperation(), new PixelCompareExchange());
            }
        }