我正在做一种增强暗淡照明图像的图像增强技术。我将640 x 480图像划分为16个大小为160 x 120的图像块,并根据每个块的亮度分别对每个块进行增强,然后将所有这些块连接起来形成最终图像。
最终输出图像看起来像具有不同对比度的16个子图像,因此在外观上是块状的。我假设双线性插值应该解决这个问题。任何人都可以告诉我如何对此图像进行插值并修复它。我正在使用matlab和opencv进行编码,因此欢迎使用任何代码。
程序检查图像的整体亮度并相应地增强它。如果在明亮的环境中拍摄图像,则增强效果最小,而如果图像较暗,则会进行更多增强。
关于程序如何检查图像是否亮或相应地完成。图像被分成四分之一和十六分之一,并且选择9个像素的参考。对这些像素的亮度值求和可以得到图像的全部亮度。总和的较低值表示暗图像,反之亦然。
我对图像进行了分割,使得在黑暗环境中存在明亮光线时,明亮光线周围的区域变得极小或没有增强,而暗区域更强。因此,最终输出是具有不同对比的子图像。
我认为插值可以平滑两个子图像之间形成的边缘。是否有其他方法可以修复最终图像,使其看起来更平滑?
希望上面的解释更清楚一点。下面给出的代码是粗略代码,而不是我正在使用的实际代码。代码只显示了该方法的工作原理,并在完成增强后输出图像。
f=imread('3.jpg');
f=imresize(f,[480 640]);
figure(1);image(f);
f=rgb2ycbcr(f);
a=1;b=1;q=0;
f1=f(:,:,1);
for r=1:4
for c=1:4
sumterm = uint16(f1(30*r,40*c))+uint16(f1(30*r,80*c))+uint16(f1(30*r,120*c))+uint16(f1(60*r,40*c))+uint16(f1(60*r,80*c))+uint16(f1(60*r,120*c))+uint16(f1(90*r,40*c))+uint16(f1(90*r,80*c))+uint16(f1(90*r,120*c));
q=q+1;
for i=a:a+119
for j=b:b+159
if sumterm >=0 && sumterm <= 113
f1(i,j) =f1(i,j)*5;
elseif sumterm > 113 && sumterm <=226
f1(i,j) =f1(i,j)*5;
elseif sumterm >226 && sumterm <=339
f1(i,j) =f1(i,j)*4;
elseif sumterm >339 && sumterm <=452
f1(i,j) =f1(i,j)*3;
elseif sumterm >452 && sumterm <=565
f1(i,j) =f1(i,j)*2;
elseif sumterm >565 && sumterm <=678
f1(i,j) =f1(i,j)*1.8;
elseif sumterm >678 && sumterm <=791
f1(i,j) =f1(i,j)*1.6;
elseif sumterm >791 && sumterm <=904
f1(i,j) =f1(i,j)*1.4;
elseif sumterm >904 && sumterm <=1020
f1(i,j) =f1(i,j)*1.2;
else
f1(i,j) =f1(i,j)*1;
end
end
end
if(b<640-160)
b=j+1;
end
end
a=i+1;
b=1;
end
f(:,:,1)=f1;
f=ycbcr2rgb(f);
image(f);
答案 0 :(得分:0)
您考虑过histogram equalization contrast stretch吗?
由于我们讨论的是平滑,因此中值滤波器可能是您最好的选择。看看Wikipedia中的输出。另外,请查看Gaussian Blur。