Ich versuche, die Canny Edge-Erkennung in C ++ nur mit STB_IMAGE und ohne Bibliotheken von Drittanbietern zu implementieren. Derzeit bin ich beim Gaußschen Blur -Schritt fest. Wenn ich es auf ein Graustufenbild anwende, erscheint der obere Teil des Bildes verschwommen, während der Rest größtenteils unverarbeitet aussieht.// Generate gaussian kernel
int size = 5, center = (size - 1) / 2;
float sigma = 1.4f;
std::vector kernel(size, std::vector(size));
double sum = 0.0;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
int x = j - center;
int y = i - center;
kernel[j] = (1.0 / (2 * M_PI * sigma * sigma)) * exp(-(x * x + y * y) / (2 * sigma * sigma));
sum += kernel[j];
}
}
// Normalize kernel
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
kernel[j] /= sum;
}
}
// Apply Gaussian filter to image
std::vector temp(width * height * channels); // Fixed buffer size
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
for (int c = 0; c < 3; c++) { // Apply to R, G, B channels
double val = 0.0;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
int neighbor_x = x + j - center;
int neighbor_y = y + i - center;
int clamped_x = std::min(std::max(neighbor_x, 0), width - 1);
int clamped_y = std::min(std::max(neighbor_y, 0), height - 1);
val += kernel[j] * data[(clamped_y * width + clamped_x) * channels + c];
}
}
temp[(y * width + x) * channels + c] = static_cast(val);
}
}
}
// Copy blurred data back
std::copy(temp.begin(), temp.end(), data);
// Write to file
stbi_write_png("gaussian.png", width, height, channels, data, width * channels);
< /code>
Was ich ausprobiert habe: < /p>
Verifiziert, dass der Gaußsche Kernel korrekt und normalisiert ist. Verarbeitet: Nur der obere Teil ist verschwommen, der Boden bleibt größtenteils ungefiltert, unterscheidet sich von den Wikipedia < /li>
< />
Ich weiß nicht, was die Gaußsche Unschärfe nur für einen Teil des Bildes anwendet? Gibt es einen Fehler darin, wie ich mit dem RGB -Bild oder -Bereich umgegangen bin?
Danke für eine Hilfe!
So wenden Sie den Gaußschen Filter richtig an ⇐ C++
-
- Similar Topics
- Replies
- Views
- Last post
-
-
Wie wenden Sie Filter auf die Nachrüstung an, um Anforderungen auszurotten?
by Anonymous » » in Android - 0 Replies
- 1 Views
-
Last post by Anonymous
-
-
-
Wie wenden Sie Filter auf die Nachrüstung an, um Anforderungen auszurotten?
by Anonymous » » in Android - 0 Replies
- 3 Views
-
Last post by Anonymous
-