python 实现ps色阶算法

该博客介绍了一种使用Python模仿Photoshop色阶调整的函数,通过调整图像的黑场、白场和灰场参数,实现对图像色彩的优化。作者分享了相关代码,并展示了调整前后的图像对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做一个分析图片色块的脚本,使用了opencv的自动色阶,感觉非常难用,针对不同图片得出的结果差强人意,然后发现ps手动调整色阶输出非常稳定,然后根据这两篇文章就有了这个函数。

本文章>>python实现简单的ps色阶调整过程_GhostRiderQin的博客-优快云博客_python 色阶调整>>https://blog.youkuaiyun.com/maozefa/article/details/4397106

import numpy as np
import cv2
# 读取图像
img = cv2.imread('4-1.png',3) # 文件名不能是中文
# 固定色阶
def color_scale_display(img, Shadow=0, Highlight=255, Midtones=1):
    '''        
        用于图像预处理,模拟ps的色阶调整
        img:传入的图片
        Highlight:白场(Shadow-255)
        Shadow:黑场(0-Highlight)
        Midtones:灰场(9.99-0.01)
        0 <= Shadow < Highlight <= 255
        返回一张图片
    '''
    if Highlight > 255:
        Highlight = 255
    if Shadow < 0:
        Shadow = 0
    if Shadow >= Highlight:
        Shadow = Highlight - 2
    if Midtones > 9.99:
        Midtones = 9.99
    if Midtones < 0.01:
        Midtones = 0.01
    # 转类型
    img = np.array(img, dtype=np.float16)
    # 计算白场黑场离差
    Diff = Highlight - Shadow
    img = img - Shadow
    img[img < 0] = 0
    img = (img/Diff)**(1/Midtones)*255
    img[img > 255] = 255
    # 转类型
    img = np.array(img, dtype=np.uint8)
    return img
# 输出显示
equ = color_scale_display(img, 0, 170, 1.53)
res = np.hstack((img,equ))  # 图像列拼接(用于显示)
cv2.imshow('res',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

<think>嗯,用户再次聚焦在DNG工作流和RAW基础调整上,看来ta对摄影后期处理的底层逻辑很感兴趣。结合之前推荐的PSCC2017方案,这次需要更系统性地解释DNG转换的意义和操作链路。用户引用的学术资料很有意思,特别是关于RAW隐形处理的描述[^1]。这提醒我强调DNG不仅是个格式转换问题,更是对传感器原始数据的重组封装。MATLAB处理RAW的案例[^2]虽然硬核,但普通用户更需要知道DNG如何简化这个流程——毕竟不是谁都会写图像处理算法。注意到ta特别标注“不是PS/LightRoom教程”,说明需求偏向工作流原理而非软件操作。上次提到的内存优化数据(DNG减少25%占用)应该结合文件结构来解释:DNG通过封装去马赛克参数和元数据[^3],让PS不需要实时解算RAW,这才是内存降低的关键。局部调整工具部分需要区分概念:基础径向滤镜是传统算法,而智能蒙版系统依赖U-Net分割[^3]。用户既然关心“基本参数”,应该先解释曝光/白平衡的数学本质,比如曝光补偿实际是图像亮度映射函数$L_{out}=L_{in}*2^{EV}$的调整。最后生成的学术化问题是个巧妙的设计。通过询问DNG兼容性问题,既延续了讨论深度(毕竟富士X-Trans传感器需要特殊处理),又能引导用户关注不同相机的处理差异——这恰好匹配ta提到的MATLAB处理案例[^2]。</think> 以下是针对DNG工作流、基本RAW参数调整及滤镜工具的完整解决方案,结合摄影与图像处理实践: --- ### **一、DNG工作流核心原理** DNG(Digital Negative)是Adobe开发的开放式RAW格式,其工作流核心在于**标准化处理流程**: 1. **原始数据封装** 将相机传感器原始数据(CFA阵列)封装为通用格式,保留线性响应曲线$y=kx$($k$为增益系数)[^1] 2. **元数据集成** ```markdown ┌─────────────┬───────────────────────────────────┐ | 元数据类型 | 作用说明 | ├─────────────┼───────────────────────────────────┤ | EXIF | 记录拍摄参数(光圈/快门/ISO) | | XMP | 存储调整操作(曝光/白平衡/降噪等) | | ICC配置文件 | 嵌入相机彩特性文件 | └─────────────┴───────────────────────────────────┘ ``` 3. **处理优势** - 兼容性:解决旧版软件无法识别新型相机RAW的问题 - 效率:相比原生RAW,PS处理DNG内存占用降低约25%[^3] - 安全性:校验和检测防止数据损坏 --- ### **二、基本RAW参数调整实战** #### 1. **基础四要素**(Camera Raw界面) | 参数 | 数学模型 | 应用场景 | |------------|---------------------|-----------------| | 曝光 | $EV = \log_2{\frac{N^2}{t}}$ | 整体亮度校正 | | 白平衡 | $T_{color} = \frac{1}{a \cdot T + b}$ | 温校正(单位:K) | | 对比度 | $C = \frac{L_{\max} - L_{\min}}{L_{\max} + L_{\min}}$ | 动态范围优化 | | 清晰度 | 高通滤波核$[-1,0,1]$卷积增强边缘 | 细节强化 | #### 2. **进工具** - **曲线工具**:通过RGB通道独立调整实现精准彩分离 ```python # 示例:S曲线增强对比度 output = a * input^γ + b # γ为伽马值,控制中间调对比度 ``` - **HSL面板**:相(Hue)/饱和度(Saturation)/明度(Luminance)分层调控 --- ### **三、滤镜工具技术解析** #### 1. **光学修正类**(依赖镜头参数库[^3]) | 滤镜类型 | 算法原理 | 效果图示 | |----------|---------------------------|----------| | 畸变校正 | 桶形畸变:$r' = r(1 + k_1r^2 + k_2r^4)$ | ▢→□ | | 暗角消除 | 亮度渐变:$V(x,y) = V_0 \cdot (1 - k \cdot r^2)$ | ◑→◉ | #### 2. **创意效果类** - **渐变滤镜**:线性蒙版 + 参数渐变过渡 ```markdown ┌───────────────┐ | 区域A:+1EV | → 曝光过渡函数:ΔEV = α · x + β |---------------| (α为衰减系数,x为水平坐标) | 区域B:0EV | └───────────────┘ ``` - **径向滤镜**:椭圆蒙版 + 羽化扩散(高斯核$G(x,y) = \frac{1}{2\pi\sigma^2}e^{-\frac{x^2+y^2}{2\sigma^2}}$) --- ### **四、专业工作流建议** ```mermaid graph LR A[相机RAW文件] --> B{DNG转换} B --> C[基础参数校准] C --> D[光学缺陷修复] D --> E[局部滤镜调整] E --> F[细节增强] F --> G[导出8bit成品] ``` > **关键操作**: > 1. DNG转换时勾选“嵌入原始RAW”(备份数据) > 2. 始终在16位深下进行滤镜操作(避免断裂) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值