簡體   English   中英

OpenCV:對16位灰度圖像進行歸一化處理會產生較弱的結果

[英]OpenCV: Normalization of 16bit grayscale image gives weak result

我想在16位灰度圖像中拉伸對比度。 void normalize(InputArray src, OutputArray dst, double alpha=1, double beta=0, int norm_type=NORM_L2, int dtype=-1, InputArray mask=noArray() )給我一點點明亮的圖像,但仍然太暗。

文檔: http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#normalize : http://docs.opencv.org/2.4/modules/core/doc/operations_on_arrays.html#normalize

表示Alpha是下限,而Beta是上限。 因此,對於16位圖像,我希望0和65535.0是正確的值。 我進行了一項研究,大多數答案都指出,在歸一化圖像中,alpha和betha是最小值和最大值。

#include "stdafx.h"
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int main()
 {
    cv::Mat image;
    image = cv::imread("darkImage.tif", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_GRAYSCALE);

if (!image.data)                           
    {
        std::cout << "Could not open or find the image" << std::endl;
        return -1;
    }

    cv::namedWindow("Original", CV_WINDOW_NORMAL | CV_WINDOW_KEEPRATIO);
    cv::imshow("Original", image);

    cv::normalize(image, image, 0, 65535.0, cv::NORM_MINMAX, CV_16U);
    cv::namedWindow("Normalize", CV_WINDOW_NORMAL | CV_WINDOW_KEEPRATIO);
    cv::imshow("Normalize", image);
    cv::waitKey();

    return 0;

}

原始圖像和歸一化圖像顯示對比度增強不足。 ImageJ規范化給我更好的結果

alpha和beta值是否適合16位圖像? 我是opencv的新手,感謝任何幫助。

我使用:opencv3.1,VisualStudio2015,W10、64位

是的,直方圖均衡可能是解決方法。 EqualizeHist不適用於16位。 所以我建議

image.convertTo(image,CV_8U,1./256.);

要么

image.convertTo(image,CV_32F);

其次是

equalizeHist(image,imageEq);

8位選項已嘗試並為true,但在截斷期間可能會丟失信息。 我沒有嘗試過使用float,但是我懷疑它最終還是在內部被截斷/合並,這違背了float的目的。

另外,如果您想正確執行操作而不關心運行時/開發時間,則可以遵循直方圖均衡/ CLAHE的思想,實現一個16位直方圖,然后執行一個16位至8位查找表。 。 (進行累積分布函數,並將此65K向量直接作為查找表應用於圖像,以使結果均勻分布。)

或者,如果您想使用自己的cv :: normalize()版本來給出居中的平均值和合理的標准偏差,則可以執行以下操作:

Scalar imMean, imStd;
meanStdDev(image, imMean, imStd);
double a = (1<<16)*(0.25/imStd.val[0]);   // give equalized image a stdDev of 0.25
double b = (1<<16)*0.5 - a*imMean.val[0]; // give equalized image a mean of 0.5
imageEq = a*image+b;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM