对比度和亮度算法调节
时间: 2024-08-16 18:04:17 浏览: 84
对比度和亮度是图像处理中常见的两个调整参数,它们分别影响着图片的整体视觉效果。
**亮度(Brightness)**:
亮度调整主要是改变整个图像的明暗程度。当亮度增加时,图像变亮;降低亮度则会使其看起来更暗。这种操作通常通过对每个像素值加上或减去一个常数来进行,这个常数就是我们说的亮度增量。
**对比度(Contrast)**:
对比度则是衡量图像中不同亮度区域之间的差异。高对比度会使图像中的细节更加鲜明,颜色区分更明显;而低对比度可能会让图像显得模糊不清。对比度调整通常是通过拉伸图像的灰度范围来实现的,即增大明亮部分和暗部的差距。
在编程中,比如在Python的PIL库中,可以使用`ImageEnhance`模块对图像进行亮度和对比度的调整。例如:
```python
from PIL import ImageEnhance
enhancer = ImageEnhance.Brightness(image)
brightened_image = enhancer.enhance(factor) # factor控制亮度增益
enhancer = ImageEnhance.Contrast(image)
contrasted_image = enhancer.enhance(factor) # factor控制对比度增益
```
相关问题
cv2调节图像对比度和亮度
要使用OpenCV(cv2)调整图像的对比度和亮度,可以使用以下代码:
```python
import cv2
import numpy as np
def adjust_brightness_contrast(image, brightness=0, contrast=0):
# 调整亮度和对比度的函数
# 亮度范围 [-100, 100]
# 对比度范围 [-100, 100]
# 调整亮度
brightness = int(2.55 * brightness)
image = np.clip(image + brightness, 0, 255)
# 调整对比度
contrast = int(2.55 * contrast)
image = np.clip((image - 127.5) * (contrast / 127.5) + 127.5, 0, 255)
return image.astype(np.uint8)
# 读取图像
image = cv2.imread('image.jpg')
# 调整亮度和对比度
adjusted_image = adjust_brightness_contrast(image, brightness=20, contrast=10)
# 显示原始图像和调整后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Adjusted Image', adjusted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,`adjust_brightness_contrast` 函数用于调整图像的亮度和对比度。传入的参数 `brightness` 和 `contrast` 分别表示亮度和对比度的调整值,范围为 [-100, 100]。代码中使用了 `np.clip` 函数来确保图像的像素值在合理的范围内。最后,通过 `cv2.imshow` 来显示原始图像和调整后的图像。
请注意,这只是一种简单的调整亮度和对比度的方法,可能不适用于所有情况。如果需要更复杂的调整方式,可以考虑使用其他图像处理库或算法。
自定义图像对比度调节算法 matlab
### Matlab 中实现自定义图像对比度调节算法
#### 邻域统计方法增强局部对比度
对于每一个像素,计算其邻域(大小为 \(2 \times step + 1\) 的方块)内的灰度均值 \(ML\) 和标准差 \(σL\)[^1]。当满足条件 \(ML <= k0*MG\) 并且 \(k1*σG<=σL<=k2*σG\) 时,则对该像素的灰度乘以因子 \(E\) 来提升对比度。
```matlab
function enhancedImage = enhanceContrast(image, step, k0, MG, k1, sigmaG, k2, E)
% 将输入参数转化为双精度浮点数以便后续运算
imageDouble = im2double(image);
[height,width,~] = size(imageDouble);
enhancedImage = zeros([height width], 'like', imageDouble);
for i = (step+1):(height-step)-1
for j = (step+1):(width-step)-1
block = imageDouble(i-step:i+step,j-step:j+step,:);
ML = mean(block(:));
sigmaL = std(block(:));
if ML <= k0 * MG && k1 * sigmaG <= sigmaL && sigmaL <= k2 * sigmaG
enhancedImage(i,j,:) = min(max(E .* imageDouble(i,j,:), 0), 1);
else
enhancedImage(i,j,:) = imageDouble(i,j,:);
end
end
end
% 边缘填充原图数据保持图片尺寸不变
enhancedImage(1:step,:, :) = imageDouble(1:step,:, :);
enhancedImage(end-1):end,:, :) = imageDouble(end-(step-1):end,:, :);
enhancedImage(:,1:step, :) = imageDouble(:,1:step, :);
enhancedImage(:,end-(step-1):end, :) = imageDouble(:,end-(step-1):end, :);
end
```
此函数实现了基于邻域统计特性的局部对比度增强逻辑。通过遍历图像中的每个像素并应用上述提到的选择性增强规则来达到目的。
#### 使用 L*a*b* 颜色空间进行全局对比度调整
另一种方式是在不同的色彩模型下操作亮度分量从而改变整体视觉效果。例如,在 `L*a*b*` 空间中修改 `L*` 组件可以有效影响感知到的颜色强度而不显著扭曲色调特性[^2]:
```matlab
% 加载阴影测试图像
[X,map] = imread('shadow.tif');
shadowRGB = ind2rgb(X,map);
% RGB转Lab
shadowLAB = rgb2lab(shadowRGB);
% 提取L通道作为亮度信息单独处理
LChannel = shadowLAB(:,:,1);
% 应用某种形式的整体拉伸或压缩映射至新的范围
newMin = ... ; newMax = ... ;
stretchedL = rescale(LChannel,newMin,newMax,'InputMin',min(min(LChannel)),'InputMax',max(max(LChannel)));
% 替换原始L层得到最终结果
enhancedShadowLAB = cat(3,stretchedL,shadowLAB(:,:,2:end));
% Lab转回RGB显示
resultingImage = lab2rgb(enhancedShadowLAB);
imshow(resultingImage);
```
这段脚本展示了如何利用MATLAB内置工具箱完成从索引型TIF文件加载、颜色模式转换到最后展示增强后的图像整个流程。
阅读全文
相关推荐
















