diff --git a/assets b/assets index c53bfab909..cd08d74961 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit c53bfab909adfeed626f91ed419555711e20bca5 +Subproject commit cd08d749611b324012555ad6f23fd76c5465bd6c diff --git a/examples/image_processing/confidence_connected_components.cpp b/examples/image_processing/confidence_connected_components.cpp index 94617163bd..4671253bc1 100644 --- a/examples/image_processing/confidence_connected_components.cpp +++ b/examples/image_processing/confidence_connected_components.cpp @@ -15,40 +15,52 @@ using namespace af; +array normalize01(const array& in) { + float min = af::min(in); + float max = af::max(in); + return (in - min) / (max - min); +} + +void markCrossHair(array& in, const unsigned x, const unsigned y, + const float val) { + const int draw_len = 5; + for (int i = -1; i < 2; i++) { + in(x + i, seq(y - draw_len, y + draw_len), 0) = val; + in(x + i, seq(y - draw_len, y + draw_len), 1) = 0.f; + in(x + i, seq(y - draw_len, y + draw_len), 2) = 0.f; + + in(seq(x - draw_len, x + draw_len), y + i, 0) = val; + in(seq(x - draw_len, x + draw_len), y + i, 1) = 0.f; + in(seq(x - draw_len, x + draw_len), y + i, 2) = 0.f; + } +} + int main(int argc, char* argv[]) { try { unsigned radius = 3; - unsigned multiplier = 3; - int iter = 5; - - array A = loadImage(ASSETS_DIR "/examples/images/donut.png", false); - - unsigned seedx = 132; - unsigned seedy = 132; - array ring = - confidenceCC(A, 1, &seedx, &seedy, radius, multiplier, iter, 255); - - seedx = 152; - seedy = 152; - array sxArr(dim4(1), &seedx); - array syArr(dim4(1), &seedy); - array core = - confidenceCC(A, sxArr, syArr, radius, multiplier, iter, 255); - - seedx = 15; - seedy = 15; - unsigned seedcoords[] = {15, 15}; - array seeds(dim4(1, 2), seedcoords); - array background = - confidenceCC(A, seeds, radius, multiplier, iter, 255); - - af::Window wnd("Confidence Connected Components demo"); + unsigned multiplier = 2; + int iter = 3; + + array input = + loadImage(ASSETS_DIR "/examples/images/depression.jpg", false); + array normIn = normalize01(input); + + unsigned seedx = 162; + unsigned seedy = 126; + array blob = confidenceCC(input, 1, &seedx, &seedy, radius, multiplier, + iter, 255); + + array colorIn = colorSpace(normIn, AF_RGB, AF_GRAY); + array colorOut = colorSpace(blob, AF_RGB, AF_GRAY); + + markCrossHair(colorIn, seedx, seedy, 1); + markCrossHair(colorOut, seedx, seedy, 255); + + af::Window wnd("Confidence Connected Components Demo"); while (!wnd.close()) { - wnd.grid(2, 2); - wnd(0, 0).image(A, "Input"); - wnd(0, 1).image(ring, "Ring Component - Seed(132, 132)"); - wnd(1, 0).image(core, "Center Black Hole - Seed(152, 152)"); - wnd(1, 1).image(background, "Background - Seed(15, 15)"); + wnd.grid(1, 2); + wnd(0, 0).image(colorIn, "Input Brain Scan"); + wnd(0, 1).image(colorOut, "Region connected to Seed(162, 126)"); wnd.show(); } } catch (af::exception& e) {