图像增强:多尺度的图像细节提升(multi-scale detail boosting)实现方法
生活随笔
收集整理的這篇文章主要介紹了
图像增强:多尺度的图像细节提升(multi-scale detail boosting)实现方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖像增強:多尺度的圖像細節提升(multi-scale detail boosting)實現方法
? ? ? ?看到一篇博客介紹基于多尺度的圖像的細節提升算法,其參考論文《Dark image enhancement based onpairwise target contrast and multi-scale detail boosting》,下圖是該論文的核心算法過程。然后自己在Matlab和OpenCV實現了該算法,最終實現的效果還是不錯的,可以增強圖像的細節部分。 ? ? ? ?論文的核心算法過程:論文的核心思想類似于Retinex,使用了三個尺度的高斯模糊,再和原圖做減法,獲得不同程度的細節信息,然后通過一定的組合方式把這些細節信息融合到原圖中,從而得到加強原圖信息的能力:請參考這一篇博客介紹:http://www.cnblogs.com/Imageshop/p/7895008.html,該博客給出了SSE的實現過程。 算法實現很容易,下面,我給出本人的OpenCV和Matlab實現方法: OpenCV實現方法: #include <iostream> #include <opencv2\opencv.hpp> #include <opencv2\highgui\highgui.hpp> using namespace std; using namespace cv;cv::Mat multiScaleSharpen(cv::Mat Src, int Radius) {int rows = Src.rows;int cols = Src.cols;int cha = Src.channels();cv::Mat B1, B2, B3;GaussianBlur(Src, B1, Size(Radius, Radius), 1.0, 1.0);//高斯模糊GaussianBlur(Src, B2, Size(Radius*2-1, Radius*2-1), 2.0, 2.0);GaussianBlur(Src, B3, Size(Radius*4-1, Radius*4-1), 4.0, 4.0);double w1 = 0.5;double w2 = 0.5;double w3 = 0.25;cv::Mat dest = cv::Mat::zeros(Src.size(), Src.type());for (size_t i = 0; i < rows; i++){uchar* src_ptr = Src.ptr<uchar>(i);uchar* dest_ptr = dest.ptr<uchar>(i);uchar* B1_ptr = B1.ptr<uchar>(i);uchar* B2_ptr = B2.ptr<uchar>(i);uchar* B3_ptr = B3.ptr<uchar>(i);for (size_t j = 0; j < cols; j++){for (size_t c = 0; c < cha; c++){int D1 = src_ptr[3*j+c] - B1_ptr[3 * j + c];int D2 = B1_ptr[3 * j + c] - B2_ptr[3 * j + c];int D3 = B2_ptr[3 * j + c] - B3_ptr[3 * j + c];int sign = (D1 > 0) ? 1 : -1;dest_ptr[3 * j + c] = saturate_cast<uchar>((1 - w1*sign)*D1 - w2*D2 + w3*D3 + src_ptr[3 * j + c]);}}}return dest; }int main(int argc) {Mat src = imread("image\\test.jpg");cv::imshow("src", src);cvWaitKey(100);cv::Mat dest=multiScaleSharpen(src,5);cv::imshow("dest", dest);cvWaitKey(0);return 0; }? ? ?Matlab實現方法: function [ dest ] = multiScaleSharpen( src, Radius) %% sigma1 = 1.0; sigma2 = 2.0; sigma3 = 4.0; H1 = fspecial('gaussian', [Radius,Radius], sigma1); H2 = fspecial('gaussian', [Radius*2-1,Radius*2-1], sigma2); H3 = fspecial('gaussian', [Radius*4-1,Radius*4-1], sigma3); B1= imfilter(src, H1, 'replicate'); B2= imfilter(src, H2, 'replicate'); B3= imfilter(src, H3, 'replicate'); % figure;imshow(B3), title('B3');D1=src-B1; D2=B1-B2; D3=B2-B3; %% w1=0.5; w2=0.5; w3=0.25; dest=(1-w1.*sign(D1)).*D1+w2*D2+w3*D3+src; % figure;imshow(dest), title('dest'); end? ? ?Matlab調用方法: src=imread('image\test.jpg'); figure;imshow(src), title('原圖'); Radius=5; [ dest ] = multiScaleSharpen( src, Radius); figure;imshow(dest), title('dest'); 效果圖:
總結
以上是生活随笔為你收集整理的图像增强:多尺度的图像细节提升(multi-scale detail boosting)实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将数据归一化到任意区间范围的方法
- 下一篇: Google AI 教育项目今起免费开放