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);
}
}
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);
}
}
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;
}
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]);
}
}
}
Aggregations