图像锐化的几种方法

图像锐化的几种方法,第1张

2种方法,USM滤镜处理图像和SmartSharpen滤镜。

平滑往往使图像中的边界、轮廓变得模糊,为了减少这类不利效果的影响,这就需要利用图像锐化技术,使图像的边缘变的清晰。

在水下图像的增强处理中除了去噪,对比度扩展外,有时候还需要加强图像中景物的边缘和轮廓。而边缘和轮廓常常位于图像中灰度突变的地方,因而可以直观地想到用灰度的差分对边缘和轮廓进行提取。

扩展资料:

锐化 *** 作的本质是增加图像细节边缘的对比度,这有助于我们的眼睛看清楚图像细节,从而使图像显得棱角分明、画面清晰,这是所有质量好的印刷摄影作品的必需条件。

而用扫描仪直接复制的图像如果没有经过修整,看起来会有些单调而模糊不清,所以我们往往需要在图像做完处理后对它作锐化处理。

阈值的设置是避免因锐化处理而导致的斑点和麻点等问题的关键参数,正确设置后就可以使图像既保持平滑的自然色调(例如背景中纯蓝色的天空)的完美,又可以对变化细节的反差作出强调。

在一般的印前处理中的值为3到4,超过10是不可取的,它们会降低锐化处理效果并使图像显得很难看。

参考资料来源:百度百科--图像锐化

有几种可能的“锐化”方式“:

根据直方图,构造灰度映射。

高频滤波后再与原图叠加。

自己随便百度一下都有很多代码。

直接给你demo

#include <opencv2/core/corehpp>

#include <opencv2/highgui/highguihpp>

#include <opencv2/imgproc/imgprochpp>

#include <iostream>

//输入形参为pass by conference-const,保证输入的图像不会被修改,并且为传递引用

void sharpenImage0(const cv::Mat &image, cv::Mat &result)

{

    //为输出图像分配内存

    resultcreate(imagesize(),imagetype());

    

    /滤波核为拉普拉斯核3x3:

                             0 -1 0

                            -1 5 -1

                             0 -1 0   

    /

    for(int j= 1; j<imagerows-1; ++j)

    {

        const uchar previous = imageptr<const uchar>(j-1);

        const uchar current = imageptr<const uchar>(j);

        const uchar next = imageptr<const uchar>(j+1);

        uchar output = resultptr<uchar>(j);

        for(int i= 1; i<imagecols-1; ++i)

        {

            output++ = cv::saturate_cast<uchar>(5current[i]-previous[i]-next[i]-current[i-1]-current[i+1]);  //saturate_cast<uchar>()保证结果在uchar范围内

        }

    }

    resultrow(0)setTo(cv::Scalar(0));

    resultrow(resultrows-1)setTo(cv::Scalar(0));

    resultcol(0)setTo(cv::Scalar(0));

    resultcol(resultcols-1)setTo(cv::Scalar(0));

}

void sharpenImage1(const cv::Mat &image, cv::Mat &result)

{

    //创建并初始化滤波模板

    cv::Mat kernel(3,3,CV_32F,cv::Scalar(0));

    kernelat<float>(1,1) = 50;

    kernelat<float>(0,1) = -10;

    kernelat<float>(1,0) = -10;

    kernelat<float>(1,2) = -10;

    kernelat<float>(2,1) = -10;

    resultcreate(imagesize(),imagetype());

    

    //对图像进行滤波

    cv::filter2D(image,result,imagedepth(),kernel);

}

int main(int argc, char argv[])

{

    cv::Mat image = cv::imread("/boldtjpg");

    cv::Mat image_gray;

    image_graycreate(imagesize(),imagetype());

    if(!imagedata)

        return -1;

    if(imagechannels() == 3)

        cv::cvtColor(image,image_gray,CV_RGB2GRAY);

    cv::Mat result;

    resultcreate(image_graysize(),image_graytype());

    double time_ = static_cast<double>(cv::getTickCount());

    sharpenImage0(image_gray,result);

    time_ = 1000(static_cast<double>(cv::getTickCount())-time_)/cv::getTickFrequency();

    std::cout<<"time = "<<time_<<"ms"<<std::endl;

    cv::namedWindow("Image 1");

    cv::imshow("Image 1",result);

    cv::Mat result1;

    result1create(image_graysize(),image_graytype());

    time_ = static_cast<double>(cv::getTickCount());

    sharpenImage1(image_gray,result1);

    time_ = 1000static_cast<double>(cv::getTickCount()-time_)/cv::getTickFrequency();

    std::cout<<"time = "<<time_<<"ms"<<std::endl;

    cv::namedWindow("Image 2");

    cv::imshow("Image 2",result1);

    cv::waitKey();

    return 0;

}

如果你只是想要阅读电子书,而不是要修改文件的话,那么还是用软件的好

给你推荐一款显示器加亮软件。

Gamma Panel是一个可以实时调节应用程序亮度的工具,它利用热键来 *** 作,所以可以让调节随心所欲,对于在不同的工作环境下要求不同的显示器状态以及显示器性能下降的用户很有帮助。

gamma panel汉化版可以根据自己需要选择显示器的亮度。我一般都把亮度调到24%,这样在有些电子书比较淡的地方都可以看到

我的网络硬盘里有,你自己去下好了。里面还有一些其他的东西,不仿下载来试试。>

以上就是关于图像锐化的几种方法全部的内容,包括:图像锐化的几种方法、opencv如何锐化图像、opencv 怎么对图像进行锐化等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10208531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存