Java opencv Laplacian Degenction размытие дает низкие оценки для четких изображений - как установить правильный порог?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java opencv Laplacian Degenction размытие дает низкие оценки для четких изображений - как установить правильный порог?

Сообщение Anonymous »


Я строю инструмент обнаружения размывающихся изображений на основе Java с помощью OpenCV. Чтобы
повысить точность, я реализовал метод дисперсии на основе плитки, чтобы оценить локальное размытие, а не глобальное размытие.package com.example.validator;

import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class TileBasedBlurDetection {

static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}

public static boolean isImageBlurry(String imagePath, double threshold, int tileSize) {
Mat image = Imgcodecs.imread(imagePath, Imgcodecs.IMREAD_GRAYSCALE);
if (image.empty()) {
System.err.println("Could not load image: " + imagePath);
return false;
}

int height = image.rows();
int width = image.cols();
double maxBlurScore = 0;

for (int y = 0; y < height; y += tileSize) {
for (int x = 0; x < width; x += tileSize) {
int roiWidth = Math.min(tileSize, width - x);
int roiHeight = Math.min(tileSize, height - y);
Rect roi = new Rect(x, y, roiWidth, roiHeight);
Mat tile = new Mat(image, roi);

Mat laplacian = new Mat();
Imgproc.Laplacian(tile, laplacian, CvType.CV_64F);

MatOfDouble mean = new MatOfDouble();
MatOfDouble stddev = new MatOfDouble();
Core.meanStdDev(laplacian, mean, stddev);
double variance = Math.pow(stddev.get(0, 0)[0], 2);

if (variance > maxBlurScore) {
maxBlurScore = variance;
}
}
}

System.out.println("Max blur score from tiles: " + maxBlurScore);
return maxBlurScore < threshold;
}

public static void main(String[] args) {
String imagePath = "D:\\id_ card image\\Family Card Sample (ID Card).jpg";
double blurThreshold = 100.0;
int tileSize = 100;

boolean isBlurry = isImageBlurry(imagePath, blurThreshold, tileSize);
System.out.println("Is image blurry? " + isBlurry);
}
}
< /code>

Решение гистограммы запускается здесь < /p>
< /blockquote>
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class ContrastEnhancer {

static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}

// Enhance contrast using histogram equalization
public static Mat enhanceContrast(Mat inputImage) {
Mat gray = new Mat();

// Convert to grayscale if needed
if (inputImage.channels() > 1) {
Imgproc.cvtColor(inputImage, gray, Imgproc.COLOR_BGR2GRAY);
} else {
gray = inputImage.clone();
}

// Apply histogram equalization
Mat equalized = new Mat();
Imgproc.equalizeHist(gray, equalized);

return equalized;
}

// Compute Laplacian variance to assess sharpness
public static double computeLaplacianVariance(Mat image) {
Mat laplacian = new Mat();
Imgproc.Laplacian(image, laplacian, CvType.CV_64F); // Use 64F for better precision

MatOfDouble mean = new MatOfDouble();
MatOfDouble stddev = new MatOfDouble();
Core.meanStdDev(laplacian, mean, stddev);

return Math.pow(stddev.get(0, 0)[0], 2); // Variance = (stddev)^2
}

public static void main(String[] args) {
String inputPath = "path/to/your/document.jpg"; // 🔁 Replace with actual path
Mat image = Imgcodecs.imread(inputPath);

if (image.empty()) {
System.err.println("Could not load image.");
return;
}

// Enhance contrast
Mat enhanced = enhanceContrast(image);

// Save the enhanced image
Imgcodecs.imwrite("enhanced_output.jpg", enhanced);
System.out.println("Enhanced image saved as enhanced_output.jpg");

// Compute and print Laplacian variance (blur score)
double blurScore = computeLaplacianVariance(enhanced);
System.out.println("Laplacian Variance (Blur Score): " + blurScore);
}
}
< /code>

Гистограмма>

Подробнее здесь: https://stackoverflow.com/questions/795 ... ges-how-to
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»