Search in sources :

Example 16 with Edge

use of boofcv.alg.segmentation.fh04.SegmentFelzenszwalbHuttenlocher04.Edge in project BoofCV by lessthanoptimal.

the class FhEdgeWeights8_PLU8 method process.

@Override
public void process(Planar<GrayU8> input, FastQueue<Edge> edges) {
    edges.reset();
    int w = input.width - 1;
    int h = input.height - 1;
    // First consider the inner pixels
    for (int y = 0; y < h; y++) {
        int indexSrc = input.startIndex + y * input.stride + 1;
        int indexDst = +y * input.width + 1;
        for (int x = 1; x < w; x++, indexSrc++, indexDst++) {
            int weight1 = 0, weight2 = 0, weight3 = 0, weight4 = 0;
            for (int i = 0; i < numBands; i++) {
                GrayU8 band = input.getBand(i);
                // (x,y)
                int color0 = band.data[indexSrc] & 0xFF;
                // (x+1,y)
                int color1 = band.data[indexSrc + 1] & 0xFF;
                // (x,y+1)
                int color2 = band.data[indexSrc + input.stride] & 0xFF;
                int diff1 = color0 - color1;
                int diff2 = color0 - color2;
                weight1 += diff1 * diff1;
                weight2 += diff2 * diff2;
                // (x+1,y+1)
                int color3 = band.data[indexSrc + 1 + input.stride] & 0xFF;
                // (x-1,y+1)
                int color4 = band.data[indexSrc - 1 + input.stride] & 0xFF;
                int diff3 = color0 - color3;
                int diff4 = color0 - color4;
                weight3 += diff3 * diff3;
                weight4 += diff4 * diff4;
            }
            Edge e1 = edges.grow();
            Edge e2 = edges.grow();
            e1.sortValue = (float) Math.sqrt(weight1);
            e1.indexA = indexDst;
            e1.indexB = indexDst + 1;
            e2.sortValue = (float) Math.sqrt(weight2);
            e2.indexA = indexDst;
            e2.indexB = indexDst + input.width;
            Edge e3 = edges.grow();
            Edge e4 = edges.grow();
            e3.sortValue = (float) Math.sqrt(weight3);
            e3.indexA = indexDst;
            e3.indexB = indexDst + 1 + input.width;
            e4.sortValue = (float) Math.sqrt(weight4);
            e4.indexA = indexDst;
            e4.indexB = indexDst - 1 + input.width;
        }
    }
    // Handle border pixels
    for (int y = 0; y < h; y++) {
        checkAround(0, y, input, edges);
        checkAround(w, y, input, edges);
    }
    for (int x = 0; x < w; x++) {
        checkAround(x, h, input, edges);
    }
}
Also used : GrayU8(boofcv.struct.image.GrayU8) Edge(boofcv.alg.segmentation.fh04.SegmentFelzenszwalbHuttenlocher04.Edge)

Example 17 with Edge

use of boofcv.alg.segmentation.fh04.SegmentFelzenszwalbHuttenlocher04.Edge in project BoofCV by lessthanoptimal.

the class FhEdgeWeights8_U8 method process.

@Override
public void process(GrayU8 input, FastQueue<Edge> edges) {
    int w = input.width - 1;
    int h = input.height - 1;
    // First consider the inner pixels
    for (int y = 0; y < h; y++) {
        int indexSrc = input.startIndex + y * input.stride + 1;
        int indexDst = +y * input.width + 1;
        for (int x = 1; x < w; x++, indexSrc++, indexDst++) {
            // (x,y)
            int color0 = input.data[indexSrc] & 0xFF;
            // (x+1,y)
            int color1 = input.data[indexSrc + 1] & 0xFF;
            // (x,y+1)
            int color2 = input.data[indexSrc + input.stride] & 0xFF;
            Edge e1 = edges.grow();
            Edge e2 = edges.grow();
            e1.sortValue = Math.abs(color1 - color0);
            e1.indexA = indexDst;
            e1.indexB = indexDst + 1;
            e2.sortValue = Math.abs(color2 - color0);
            e2.indexA = indexDst;
            e2.indexB = indexDst + input.width;
            // (x+1,y+1)
            int color3 = input.data[indexSrc + 1 + input.stride] & 0xFF;
            // (x-1,y+1)
            int color4 = input.data[indexSrc - 1 + input.stride] & 0xFF;
            Edge e3 = edges.grow();
            Edge e4 = edges.grow();
            e3.sortValue = Math.abs(color3 - color0);
            e3.indexA = indexDst;
            e3.indexB = indexDst + 1 + input.width;
            e4.sortValue = Math.abs(color4 - color0);
            e4.indexA = indexDst;
            e4.indexB = indexDst - 1 + input.width;
        }
    }
    // Handle border pixels
    for (int y = 0; y < h; y++) {
        checkAround(0, y, input, edges);
        checkAround(w, y, input, edges);
    }
    for (int x = 0; x < w; x++) {
        checkAround(x, h, input, edges);
    }
}
Also used : Edge(boofcv.alg.segmentation.fh04.SegmentFelzenszwalbHuttenlocher04.Edge)

Example 18 with Edge

use of boofcv.alg.segmentation.fh04.SegmentFelzenszwalbHuttenlocher04.Edge in project BoofCV by lessthanoptimal.

the class FhEdgeWeights8_U8 method check.

private void check(int x, int y, int color0, int indexA, GrayU8 input, FastQueue<Edge> edges) {
    if (!input.isInBounds(x, y))
        return;
    int indexSrc = input.startIndex + y * input.stride + x;
    int indexB = +y * input.width + x;
    int colorN = input.data[indexSrc] & 0xFF;
    Edge e1 = edges.grow();
    e1.sortValue = (float) Math.abs(color0 - colorN);
    e1.indexA = indexA;
    e1.indexB = indexB;
}
Also used : Edge(boofcv.alg.segmentation.fh04.SegmentFelzenszwalbHuttenlocher04.Edge)

Example 19 with Edge

use of boofcv.alg.segmentation.fh04.SegmentFelzenszwalbHuttenlocher04.Edge in project algorithms-sedgewick-wayne by reneargento.

the class Exercise31_AllPairsShortestPathsOnALine method main.

public static void main(String[] args) {
    EdgeWeightedGraph edgeWeightedGraph = new EdgeWeightedGraph(5);
    edgeWeightedGraph.addEdge(new Edge(0, 1, 2));
    edgeWeightedGraph.addEdge(new Edge(1, 2, 3));
    edgeWeightedGraph.addEdge(new Edge(2, 3, 4));
    edgeWeightedGraph.addEdge(new Edge(3, 4, 1));
    AllPairsShortestPathsOnALine allPairsShortestPathsOnALine = new Exercise31_AllPairsShortestPathsOnALine().new AllPairsShortestPathsOnALine(edgeWeightedGraph);
    double[][] expectedDistances = { { 0, 2, 5, 9, 10 }, { 2, 0, 3, 7, 8 }, { 5, 3, 0, 4, 5 }, { 9, 7, 4, 0, 1 }, { 10, 8, 5, 1, 0 } };
    for (int source = 0; source < edgeWeightedGraph.vertices(); source++) {
        for (int target = 0; target < edgeWeightedGraph.vertices(); target++) {
            StdOut.println("Distance from " + source + " to " + target + ": " + allPairsShortestPathsOnALine.dist(source, target) + " Expected: " + expectedDistances[source][target]);
        }
    }
}
Also used : EdgeWeightedGraph(chapter4.section3.EdgeWeightedGraph) Edge(chapter4.section3.Edge)

Aggregations

Edge (boofcv.alg.segmentation.fh04.SegmentFelzenszwalbHuttenlocher04.Edge)18 GrayF32 (boofcv.struct.image.GrayF32)4 GrayU8 (boofcv.struct.image.GrayU8)4 FastQueue (org.ddogleg.struct.FastQueue)2 Test (org.junit.Test)2 Edge (chapter4.section3.Edge)1 EdgeWeightedGraph (chapter4.section3.EdgeWeightedGraph)1