如何提高图像的强度对比度?

时间:2017-11-28 03:30:35

标签: image opencv image-processing

我的图像背景强度对比度非常低。 两个箭头之间的第一行是低对比度的线。 第二行还可以。请参见下图。

enter image description here

原始图像如下所示。

enter image description here

我使用以下方法来增强灰度级的对比度。 首先将图像更改为灰色并使用以下方法。

cv::Mat temp;
for (int i = 0; i < 1; i++) // number of iterations has to be adjusted
{
    cv::threshold(image, temp, 0, 255, CV_THRESH_BINARY| CV_THRESH_OTSU);// 
    cv::bitwise_and(image, temp, image);
    cv::normalize(image, image, 0, 255, cv::NORM_MINMAX, -1, temp);     
}

我的图像在灰度级中的对比度略高一点,但是在灰度或颜色方面有没有比这更好的方法?

enter image description here

1 个答案:

答案 0 :(得分:1)

@Antoine Zambelli答案很棒,而且是正确答案。无论如何,我在这里挖了一些并尝试用fastNlMeansDenoising删除之前的噪音以改善最终结果:

enter image description here

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/photo.hpp"

using namespace cv;
using cv::CLAHE;

int main(int argc, char** argv) {
    Mat srcImage = imread("H1o8X.png", CV_LOAD_IMAGE_GRAYSCALE);
    imshow("src", srcImage);

    Mat denoised;

    fastNlMeansDenoising(srcImage, denoised, 10);

    Mat image = denoised;

    Ptr<CLAHE> clahe = createCLAHE();
    clahe->setClipLimit(30.0);
    clahe->setTilesGridSize(Size(8, 8));
    Mat imgray_ad;
    clahe->apply(image, imgray_ad);
    Mat imgray;
    cv::equalizeHist(image, imgray);
    imshow("imgray_ad", imgray_ad);
    imshow("imgray", imgray);

    Mat thresh;
    threshold(imgray_ad, thresh, 150, 255, THRESH_BINARY | THRESH_OTSU);
    imshow("thresh", thresh);

    Mat result;
    Mat kernel = Mat::ones(8, 8, CV_8UC1);

    erode(thresh, result, kernel);
    imshow("result", result);

    waitKey();
    return 0;
}