diff --git a/examples/example_win32_directx11/main.cpp b/examples/example_win32_directx11/main.cpp index d16ed19..cf6a0c1 100644 --- a/examples/example_win32_directx11/main.cpp +++ b/examples/example_win32_directx11/main.cpp @@ -78,106 +78,106 @@ bool LoadTextureFromFile(unsigned char* image_data, int image_width, int image_h #include #include -void watershedSegmentation(unsigned char* image, int width, int height) { - const float INFINITY = std::numeric_limits::max(); - - int* labels = new int[width * height]; - for (int i = 0; i < width * height; ++i) { - labels[i] = -1; - } - - float* copy = new float[width * height]; - for (int i = 0; i < width * height; ++i) { - copy[i] = static_cast(image[i]); - } - - std::priority_queue, [](const Pixel& p1, const Pixel& p2) { - return p1.value < p2.value; - }> queue; - - for (int i = 0; i < width * height; ++i) { - queue.push(Pixel(i % width, i / width, copy[i])); - } - - while (!queue.empty()) { - Pixel pixel = queue.top(); - queue.pop(); - - int x = pixel.x; - int y = pixel.y; - int index = y * width + x; - - for (int i = -1; i <= 1; ++i) { - for (int j = -1; j <= 1; ++j) { - int nx = x + i; - int ny = y + j; - int nIndex = ny * width + nx; - - if (nx >= 0 && nx < width && ny >= 0 && ny < height && labels[nIndex] != -1) { - if (labels[index] == -1) { - labels[index] = labels[nIndex]; - } else if (labels[index] != labels[nIndex]) { - labels[index] = -2; - } - } - } - } - - if (labels[index] == -1) { - labels[index] = index; - - copy[index] = INFINITY; - - for (int i = -1; i <= 1; ++i) { - for (int j = -1; j <= 1; ++j) { - int nx = x + i; - int ny = y + j; - int nIndex = ny * width + nx; - - if (nx >= 0 && nx < width && ny >= 0 && ny < height && labels[nIndex] == -1) { - queue.push(Pixel(nx, ny, copy[nIndex])); - } - } - } - } - } - - for (int i = 0; i < width * height; ++i) { - if (labels[i] == -2) { - image[i] = static_cast(INFINITY); - } - } - - delete[] labels; - delete[] copy; -} - -void dilation(unsigned char* image, int width, int height) { - int structuringElement[3][3] = { - {0, 255, 0}, - {255, 255, 255}, - {0, 255, 0} - }; - - for (int y = 0; y < height; ++y) { - for (int x = 0; x < width; ++x) { - int maxPixelValue = 0; - for (int j = -1; j <= 1; ++j) { - for (int i = -1; i <= 1; ++i) { - if (x + i >= 0 && x + i < width && y + j >= 0 && y + j < height) { - int imagePixelValue = image[(y + j) * width + (x + i)]; - int structuringElementValue = structuringElement[j + 1][i + 1]; - int newPixelValue = imagePixelValue + structuringElementValue; - if (newPixelValue > maxPixelValue) { - maxPixelValue = newPixelValue; - } - } - } - } - image[y * width + x] = static_cast(maxPixelValue > 255 ? 255 : maxPixelValue); - } - } -} +//void watershedSegmentation(unsigned char* image, int width, int height) { +// const float INFINITY = std::numeric_limits::max(); +// +// int* labels = new int[width * height]; +// for (int i = 0; i < width * height; ++i) { +// labels[i] = -1; +// } +// +// float* copy = new float[width * height]; +// for (int i = 0; i < width * height; ++i) { +// copy[i] = static_cast(image[i]); +// } +// +// std::priority_queue, [](const Pixel& p1, const Pixel& p2) { +// return p1.value < p2.value; +// }> queue; +// +// for (int i = 0; i < width * height; ++i) { +// queue.push(Pixel(i % width, i / width, copy[i])); +// } +// +// while (!queue.empty()) { +// Pixel pixel = queue.top(); +// queue.pop(); +// +// int x = pixel.x; +// int y = pixel.y; +// int index = y * width + x; +// +// for (int i = -1; i <= 1; ++i) { +// for (int j = -1; j <= 1; ++j) { +// int nx = x + i; +// int ny = y + j; +// int nIndex = ny * width + nx; +// +// if (nx >= 0 && nx < width && ny >= 0 && ny < height && labels[nIndex] != -1) { +// if (labels[index] == -1) { +// labels[index] = labels[nIndex]; +// } else if (labels[index] != labels[nIndex]) { +// labels[index] = -2; +// } +// } +// } +// } +// +// if (labels[index] == -1) { +// labels[index] = index; +// +// copy[index] = INFINITY; +// +// for (int i = -1; i <= 1; ++i) { +// for (int j = -1; j <= 1; ++j) { +// int nx = x + i; +// int ny = y + j; +// int nIndex = ny * width + nx; +// +// if (nx >= 0 && nx < width && ny >= 0 && ny < height && labels[nIndex] == -1) { +// queue.push(Pixel(nx, ny, copy[nIndex])); +// } +// } +// } +// } +// } +// +// for (int i = 0; i < width * height; ++i) { +// if (labels[i] == -2) { +// image[i] = static_cast(INFINITY); +// } +// } +// +// delete[] labels; +// delete[] copy; +//} +// +//void dilation(unsigned char* image, int width, int height) { +// int structuringElement[3][3] = { +// {0, 255, 0}, +// {255, 255, 255}, +// {0, 255, 0} +// }; +// +// for (int y = 0; y < height; ++y) { +// for (int x = 0; x < width; ++x) { +// int maxPixelValue = 0; +// for (int j = -1; j <= 1; ++j) { +// for (int i = -1; i <= 1; ++i) { +// if (x + i >= 0 && x + i < width && y + j >= 0 && y + j < height) { +// int imagePixelValue = image[(y + j) * width + (x + i)]; +// int structuringElementValue = structuringElement[j + 1][i + 1]; +// int newPixelValue = imagePixelValue + structuringElementValue; +// if (newPixelValue > maxPixelValue) { +// maxPixelValue = newPixelValue; +// } +// } +// } +// } +// image[y * width + x] = static_cast(maxPixelValue > 255 ? 255 : maxPixelValue); +// } +// } +//} void erosion(unsigned char* image, int width, int height) {