matlab改变图片亮度(HSV模型)

1 解决思路

1.1 问题背景

对于有一些如光照等原因造成的图片过于明亮等情况,尝试用图像处理的方法对其“稍作修改~”

1.2 解决思路

  1. 考虑对于图片亮度越大的地方,调整的“力度”越大;
  2. 采用“渐变”的方式改变调整的“力度”;
  3. 渐变的形式对比选择;

2 采用“渐变”的方式改变调整的“力度”

2.1 线性调整

线性调整函数
根据亮度高的地方调整的力度要大,可以考虑线性函数调整,随着亮度值(相当于灰度值)增加,对其进行亮度减小的作用均匀增加。

2.2 非线性调整

非线性调整函数
对比前面的线性函数,可以发现非线性函数可以对灰度值高(亮)的区域大力调整,而对灰度值低(暗)的区域几乎不做调整。

3 实验与分析

3.1 实现

该方法选择HSV模型来调整图像明暗程度,首先将RGB图像转化成HSV模型,再通过建立好的调整函数对V进行调整。调整函数如下:

线性y = 0.00392*x
非线性y1 = (x/255).^2
非线性y2 = (x/255).^6

当然了,处理的时候前面加上“-”,后面会给出程序。
对于下面的3张图,请注意看天空和云朵的部分(亮的部分)和路面(明暗中间区域),暗的地方看着不明显……
调整结果分析
从图中可以看出,线性调整和非线性调整都降低了图像的亮度,但是非线性调整总体给人感觉更平滑。此外,在天空部分,非线性处理保留了相当的对比度,而线性调整虽然也起到了降低亮度的作用,但是对比度也同步降低了的样子;路面处,非线性调整很明显保留了原图像特征,而线性调整则也对其进行了亮度调整,虽然对相对高亮度区域其调整力度有所减少,但是依然能够感觉到降低了图像对比度(效果得看情况@-@)。
再来看一下这几幅图的直方图:
直方图对比
注意看横坐标的范围,非线性调整相对线性调整,保留了更多的灰度级,看到原图的直方图,应该照片照的不好,不过对于亮处的处理确实效果可以。大家可以自己试一试其他的图片。
再看直方图的形状,形态几乎没有改变,只是压缩了一点。

3.2 matlab代码

clc
close
clear
I = imread("C:\Users\含笑韭泉\Desktop\光照1.jpg");
I_gray = rgb2gray(I);
I_hsv = rgb2hsv(I);
I_new1 = I_hsv;
I_new2 = I_hsv;
for i = 1:size(I_gray,1)
    for j = 1:size(I_gray,2)
        %以下是对hsv中的v(明度)进行调整
        I_new1(i,j,3) = I_hsv(i,j,3) * (1-0.25*(0.00392*double(I_gray(i,j))));  %线性
        I_new2(i,j,3) = I_hsv(i,j,3) * (1-0.25*(double(I_gray(i,j))/255)^6);  %非线性
    end
end
I_end1 = hsv2rgb(I_new1);
I_end2 = hsv2rgb(I_new2);
figure
subplot(1,3,1);
imshow(I);
xlabel("原图");
subplot(1,3,2)
imshow(I_end1);
xlabel("线性调整,亮度最大下降25%");
subplot(1,3,3)
imshow(I_end2);
xlabel("非线性调整,亮度最大下降25%");
figure
subplot(1,3,1);
imhist(hsv2rgb(I_hsv),64);  %保持横坐标相同
title("原图直方图");
subplot(1,3,2);
imhist(I_end1,64);
title("线性调整");
subplot(1,3,3);
imhist(I_end2,64);
title("非线性调整");

欢迎各位小伙伴来一起学习图像处理,期待与大家共同进步!

  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值