clc
clear all;
close all;
BLOCK_X = 9
BLOCK_Y = 7
img_test = imread('test_rggb.bmp');
img_flat = imread('flat_rggb.bmp');
%原图像
[rown,coln] =size(img_flat);
%分通道
r = img_flat(1:2:end,1:2:end);
b = img_flat(2:2:end,2:2:end);
g = zeros(rown,coln/2);
g(1:2:end,:) = img_flat(1:2:end,2:2:end);
g(2:2:end,:) = img_flat(2:2:end,1:2:end);
%中值滤波,可以抑制噪声的干扰
img_filt= img_flat;
% img_filt=medfilt2(img_flat);
subSampleRGB=ones(BLOCK_Y+1,BLOCK_X+1,3);
strideX=floor(coln/BLOCK_X-1);
strideY=floor(rown/BLOCK_Y-1);
for i=1:BLOCK_X+1
for j=1:BLOCK_Y+1
rows = floor((j-1-0.5)*strideY);
rowe = floor((j-1+0.5)*strideY);
cols = floor((i-1-0.5)*strideX);
cole = floor((i-1+0.5)*strideX);
if rows <= 0
rows=0;
end
if rowe >= rown;
rowe = rown;
end
if cols <= 0
cols=0;
end
if cole >= coln;
cole = coln;
end
subimg = zeros(rowe-rows,cole-cols);
subimg = img_filt(rows+1:rowe,cols+1:cole);
subSampleRGB(j,i,1)=mean2( subimg(1:2:end,1:2:end));
gr=mean2( subimg(1:2:end,2:2:end));
gb=mean2( subimg(2:2:end,1:2:end));
subSampleRGB(j,i,2) = mean2([gr,gb]);
subSampleRGB(j,i,3)=mean2( subimg(2:2:end,2:2:end));
end
end
figure(3)
[A,B] = meshgrid(1:BLOCK_X+1,1:BLOCK_Y+1);
mesh(A,B,subSampleRGB(:,:,1));
hold on
mesh(A,B,subSampleRGB(:,:,2));
hold on
mesh(A,B,subSampleRGB(:,:,3));
%Gainlut luma gain (Y-shading gain)
gainlut=zeros(BLOCK_Y+1,BLOCK_X+1,3);% gainlut
centerX = coln/2;
centerY = rown/2;
centerXs = centerX - strideX/2 + 1;
centerXe = centerXs + strideX - 1;
centerYs = centerY - strideY/2 + 1;
centerYe = centerYs + strideY - 1;
centerimg =img_filt( centerYs:centerYe,centerXs:centerXe);
centerRvg = mean2( centerimg(1:2:end,1:2:end));
centerBvg = mean2( centerimg(2:2:end,2:2:end));
centergr=mean2( centerimg(1:2:end,2:2:end));
centergb=mean2( centerimg(2:2:end,1:2:end));
centerGvg = mean2([centergr,centergb]);
centerAVG = [centerRvg,centerGvg,centerBvg];
for i = 1:BLOCK_X+1
for j =1:BLOCK_Y+1
for k = 1:3
gainlut(j,i,k)=centerAVG(k)/ subSampleRGB(j,i,k);
end
end
end
%Gainlut chroma gain (colorshading gain)
gainlut_c = zeros(BLOCK_Y+1,BLOCK_X+1,2);
center_RoverG = mean2( subSampleRGB(floor(BLOCK_Y/2+1) : floor(BLOCK_Y/2+1)+1, floor(BLOCK_X/2+1) : floor(BLOCK_X/2+1)+1,1)) / mean2( subSampleRGB(floor(BLOCK_Y/2+1) : floor(BLOCK_Y/2+1)+1, floor(BLOCK_X/2+1) : floor(BLOCK_X/2+1)+1,2));
center_BoverG = mean2( subSampleRGB(floor(BLOCK_Y/2+1) : floor(BLOCK_Y/2+1)+1, floor(BLOCK_X/2+1) : floor(BLOCK_X/2+1)+1,3)) / mean2( subSampleRGB(floor(BLOCK_Y/2+1) : floor(BLOCK_Y/2+1)+1, floor(BLOCK_X/2+1) : floor(BLOCK_X/2+1)+1,2));
for i = 1:BLOCK_X+1
for j =1:BLOCK_Y+1
RoverG = subSampleRGB(j,i,1)/subSampleRGB(j,i,2);
BoverG = subSampleRGB(j,i,3)/subSampleRGB(j,i,2);
gainlut_c(j,i,1) = RoverG/center_RoverG;%/RoverG-1;
gainlut_c(j,i,2) = BoverG/center_BoverG;%/BoverG-1;
end
end
%chroma+luma gain
gainlut_full = zeros(BLOCK_Y+1,BLOCK_X+1,2);
for i = 1:BLOCK_X+1
for j =1:BLOCK_Y+1
gainlut_full(:,:,1) = gainlut(:,:,1) + gainlut_c(j,i,1);
gainlut_full(:,:,2) = gainlut(:,:,2) + gainlut_c(j,i,2);
end
end
%(BLOCK_H+1)*(BLOCK_V+1) colorgain
figure(4)
[C,D] = meshgrid(1:BLOCK_X+1,1:BLOCK_Y+1);
mesh(C,D,gainlut_c(:,:,1))
hold on
mesh(C,D,gainlut_c(:,:,2))
%Y shading correction gain
figure(5)
mesh(C,D,gainlut(:,:,1))
hold on
mesh(C,D,gainlut(:,:,2))
hold on
mesh(C,D,gainlut(:,:,3))
figure(6)
mesh(C,D,gainlut_full(:,:,1))
hold on
mesh(C,D,gainlut(:,:,2))
hold on
mesh(C,D,gainlut_full(:,:,2))
% gainlut(:,:,1) = gainlut_full(:,:,1);
% gainlut(:,:,2) = gainlut(:,:,2);
% gainlut(:,:,3) =gainlut_full(:,:,2);
%双线性插值FullGainLut
x = 1:strideX:coln+1;
x(end) = coln;
y = 1:strideY:rown+1;
y(end) = rown;
xitp = 1:2:coln;
yitp = 1:2:rown;
[Xitp,Yitp]=meshgrid(xitp,yitp);
rgain=interp2(x,y,gainlut(:,:,1),Xitp,Yitp);
xitp = 2:2:coln;
yitp = 1:2:rown;
[Xitp,Yitp]=meshgrid(xitp,yitp);
grgain=interp2(x,y,gainlut(:,:,2),Xitp,Yitp);
xitp = 1:2:coln;
yitp = 2:2:rown;
[Xitp,Yitp]=meshgrid(xitp,yitp);
gbgain=interp2(x,y,gainlut(:,:,2),Xitp,Yitp);
xitp = 2:2:coln;
yitp = 2:2:rown;
[Xitp,Yitp]=meshgrid(xitp,yitp);
bgain=interp2(x,y,gainlut(:,:,3),Xitp,Yitp);
[gn,gm]=size(gbgain);
ggain = zeros(gn*2,gm);
ggain(1:2:end,:) = grgain;
ggain(2:2:end,:) = gbgain;
gain=zeros(rown,coln);
gain(1:2:end,1:2:end) = rgain;
gain(1:2:end,2:2:end) = grgain;
gain(2:2:end,1:2:end) = gbgain;
gain(2:2:end,2:2:end) = bgain;
lscgain = gain;
figure(7)
imgDoubleType = im2double(img_flat);
imgDoubleType = imgDoubleType.*lscgain;
imgUint = im2uint8(imgDoubleType);
imshow(imgUint)
imwrite(imgUint,'flat.bmp','bmp')
figure(9)
subplot(2,2,1)
[rown,coln] =size(img_flat);
width = 1:coln; height = 1:rown;
[X1,Y1] = meshgrid(width,height);
mesh(X1,Y1,im2double(imgUint));
subplot(2,2,2)
width = 1:coln; height = 1:rown;
[X1,Y1] = meshgrid(width,height);
mesh(X1,Y1,im2double(img_flat));
subplot(2,2,3)
width = 1:coln; height = 1:rown;
[X1,Y1] = meshgrid(width,height);
mesh(X1,Y1,im2double(img_filt));
figure(8)
imgDoubleType = im2double(img_test);
imgDoubleType = imgDoubleType.*lscgain;
imgUint = im2uint8(imgDoubleType);
imshow(imgUint)
imwrite(imgUint,'test_lsc.bmp','bmp')
LSC.zip matlab源码和图片帮助理解
需积分: 50 84 浏览量
2019-12-15
22:23:44
上传
评论 2
收藏 284KB ZIP 举报
chengxl99
- 粉丝: 6
- 资源: 3
最新资源
- 基于Python实现的自动化办公项目.zip
- 基于python实现的基于PyQt5和爬虫的小说阅读系统.zip
- 机械设计整经机上纱自动化sw20非常好的设计图纸100%好用.zip
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈