```matlab
clear
clc
close all
img= imread ( 'scene1.jpg' ) ; subplot ( 221 ) , imshow ( uint8 ( img) ) , title ( ' 原始低照度图像”) ; img ( : : , 1 ) = 255 - img ( : : 1 ) ;
img ( : : , 2 ) = 255 - img ( : 2 ) ;
img ( : , : 3 ) = 255 - img ( : 3 ) ;
sz= size ( img) ;
w= sZ ( 2 ) ;
h= sz ( 1 ) ;
dark l= zeros ( h, w) ;
for y= 1 : h
for x= 1 : W
dark_l ( y, x) = min ( img ( y, x, : ) ) ;
end
end
kenlRatio = .03 :
krnlsz = floor ( max ( [ 3 , w* kenlRatio, h* kenlRatio] ) ) ;
dark l2 = minfilt2 ( dark l, [ krnlsz, krnlsz] ) ;
dark 12 ( h, w) = 0 ;
dark l2= uint8 ( dark 12 ) ;
dark channel= double ( dark 12 ) ;
aa= dark channel;
hh= floor ( w* h* 0.001 ) ;
bb= reshape ( aa, 1 , ) ;
bb= sort ( bb, 'descend' ) ;
cc= find ( bb> 0 , hh) ;
dd= bb ( cc ( hh) ) ;
ee= aa ( find ( aa> dd) ) ;
[ mm, nn] = find ( aa> dd) ;
AA= fee mm nnl:
bw= zeros ( h, w) ;
num= length ( find ( aa> dd) ) ;
sum潍鈔伺0 卮繡人始
for y= 1 : h
for x= 1 : W
for k= 1 : num
if y== AA ( k, 2 ) && x== AA ( k, 3 ) && dark channel ( y, x) == AA ( k, 1 ) bw ( y, x) = 255 ;
sum= sum+ AA ( k, 1 ) ;
end
end
end
end
meandc= floor ( sum/ num) ;
minAtomsLight = 240 :
A= min ( [ minAtomsLight, meandc] ) ;
w0= 0.9 :
t= 1 - w0* ( dark channel/ A) ;
t0= 0.1 ;
t= max ( t, t0) ;
img d= double ( img) ;
J= zeros ( h, w, 3 ) ;
J ( : , : , 1 ) = ( img_d ( : : , 1 ) - ( 1 - t) * A) ./ t;
J ( : : 1 ) = 255 - J ( : : 1 ) ;
J ( : : 2 ) = 255 - J ( : : 2 ) ;
J ( : : 3 ) = 255 - J ( : : 3 ) ;
subplot ( 222 ) , imshow ( J) , title ( "基于暗原色先验的低照度图像增强”) ;
Image= ( imread ( 'scene1.jpg' ) ) ;
height, width, c] = size ( lmage) ;
Rl= double ( lmage ( : , : , 1 ) ) ; Gl= double ( lmage ( : , : , 2 ) ) ; Bl= double ( lmage ( : . .3 ) ) ;
sigma= 100 ; filtersize= [ height, widthl; gaussfilter= fspecial ( 'gaussian,filtersize,sigma); Rlow=imfilter(Rl,gaussfilter,replicate,' conv' ) :
3 low= imfilter ( Gl, gaussfilter, 'replicate' , 'conv' ) ; low= imfilter ( Bl. gaussfilter. 'replicate' . 'conv' ) :
ninRL= min ( min ( Rlow) : minGL= min ( min ( Glow) ; minBL= min ( min ( Blow) ; maxRL= max ( max ( Rlow) ; maxGL= max ( max ( Glow) ; maxBL= max ( max ( Blow) .
RLi= ( Rlow- minRL/ / ( maxRL- minRL) :
3 Li= ( Glow- minGL) / ( maxGL- minGL) ,
BLi= ( Blow- minBL) / ( maxBL- minBL) ;
i = cat ( 3. RLi. GLi. BLi) :
Rhigh= log ( Rl./ Rlow+ 1 ) :
Shigh= log ( Gl./ Glow+ 1 ) :
Bhigh= log ( B1./ Blow+ 1 ) : SSRl= cat ( 3 , Rhigh, Ghigh, Bhigh) ;
subplot ( 2 , 2 , 3 ) , imshow ( SSRl) , title ( "单尺度Retinex增强' ) ;
Image= imread ( 'scene1.jpg' ) ; [ height width c] = size ( lmage) ; dark l= zeros ( height, width) ;
for y= 1 : height
for x= 1 : width
dark_l ( y, x) = min ( lmage ( y, x, : ) ) ;
end
end
kenlRatio = .03 ;
krnlsz = floor ( max ( [ 3 , width* kenlRatio, height* kenlRatio] ) ) ; dark l2= minfilt2 ( darkl, [ krnlsz, krnlsz] ) ;
dark l2 ( height, width) = 0 ;
dark channel= dark l2;
hh= floor ( width* height* 0.001 ) ;
bb= reshape ( dark channel, 1 , [ ] ) ;
bb= sort ( bb, 'descend' ) ;
cc= find ( bb> 0 , hh) ;
dd= bb ( cc ( hh) ) ;
ee= dark channel ( find ( dark channel> dd) ) ;
AA= [ ee] ;
num= length ( find ( dark channel> dd) ) ;
sum= 0 :
for k= 1 : num
sum= sum+ AA ( k) ;
end
meandc= floor ( sum/ num) :
minAtomsLight = 240 ;
A= min ( [ minAtomsLight, meandc] ) ;
w0= 0.9 : t0= 0.3 ;
t= 1 - w0* ( dark channel/ A) ;
t= max ( t, tO) ;
img d= double ( lmage) ;
Newlmage = zeros ( height, width, 3 ) ; Newmage ( : , : , 1 ) = ( img_d ( : , : , 1 ) - ( 1 - t) * A) ./ t;