自动色阶图像处理算法

本文探讨了使用Python实现的自动色阶图像处理算法,重点在于其在去雾效果上的显著提升,同时相比暗通道算法,该方法表现出更快的处理速度。
摘要由CSDN通过智能技术生成

通过仿真自动色阶算法,发现其去雾效果十分明显,并且速度快于暗通道算法。

python实现:

#!python3.6

import numpy as np
import cv2

def ComputeHist(img):
    h,w = img.shape
    hist, bin_edge = np.histogram(img.reshape(1,w*h), bins=list(range(257)))
    return hist
    
def ComputeMinLevel(hist, rate, pnum):
    sum = 0
    for i in range(256):
        sum += hist[i]
        if (sum >= (pnum * rate * 0.01)):
            return i
            
def ComputeMaxLevel(hist, rate, pnum):
    sum = 0
    for i in range(256):
        sum += hist[255-i]
        if (sum >= (pnum * rate * 0.01)):
            return 255-i
            
def LinearMap(minlevel, maxlevel):
    if (minlevel >= maxlevel):
        return []
    else:
        newmap = np.zeros(256)
        for i in range(256):
            if (i < minlevel):
                newmap[i] = 0
            elif (i > maxlevel):
            
  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
图像自动色阶算法是一种常见的图像处理算法,可以自动调整图像的亮度和对比度,使图像看起来更加清晰和鲜明。下面是一个简单的 C++ 实现: ```c++ #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(int argc, char** argv) { if (argc != 2) { cout << "Usage: ./auto_levels <image_path>" << endl; return -1; } Mat image = imread(argv[1]); if (image.empty()) { cout << "Could not open or find the image" << endl; return -1; } Mat hsv_image; cvtColor(image, hsv_image, COLOR_BGR2HSV); vector<Mat> hsv_channels; split(hsv_image, hsv_channels); // 计算直方图 int hist_size = 256; float range[] = { 0, 256 }; const float* hist_range = { range }; Mat hist; calcHist(&hsv_channels[2], 1, 0, Mat(), hist, 1, &hist_size, &hist_range, true, false); // 计算积分直方图 Mat cum_hist = hist.clone(); for (int i = 1; i < hist_size; i++) { cum_hist.at<float>(i) += cum_hist.at<float>(i - 1); } // 计算最小和最大灰度级 float min_value = cum_hist.at<float>(0); float max_value = cum_hist.at<float>(hist_size - 1); float alpha = 255.0 / (max_value - min_value); // 调整亮度和对比度 Mat lut(1, hist_size, CV_8U); for (int i = 0; i < hist_size; i++) { float value = (cum_hist.at<float>(i) - min_value) * alpha; value = max(0.0f, min(value, 255.0f)); lut.at<uchar>(i) = static_cast<uchar>(value); } Mat equalized_image; LUT(hsv_channels[2], lut, equalized_image); hsv_channels[2] = equalized_image; Mat equalized_hsv_image; merge(hsv_channels, equalized_hsv_image); Mat result_image; cvtColor(equalized_hsv_image, result_image, COLOR_HSV2BGR); imshow("Original Image", image); imshow("Equalized Image", result_image); waitKey(0); return 0; } ``` 这个实现使用了 OpenCV 库,首先将输入图像转换为 HSV 颜色空间,然后计算亮度通道的直方图和积分直方图,调整亮度和对比度,最后将调整后的亮度通道与其他通道合并,将结果转换回 BGR 颜色空间并显示。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值