%暗影去雾算法
%filename------文件名或文件绝对路径
%用法:darktest('7.png')
close all
clc
w0=0.65 %0.65 乘积因子用来保留一些雾,1时完全去雾
t0=0.1
I=imread(filename)
figure
set(gcf,'outerposition',get(0,'screensize'))
subplot(221)
imshow(I)
title('原始图像')
[h,w,s]=size(I)
min_I=zeros(h,w)
%下面取得暗影通道图像
for i=1:h
for j=1:w
dark_I(i,j)=min(I(i,j,:))
end
end
subplot(223)
imshow(dark_I)
title('dark channnel的图形')
Max_dark_channel=double(max(max(dark_I))) %天空亮度
dark_channel=double(dark_I)
t=1-w0*(dark_channel/Max_dark_channel) %取得透谢分布率图
subplot(224)
T=uint8(t*255)
首先您很多行结尾都忘记写分号了。。。其次,这里
dc2 = minfilt2(dc, [krnlsz,krnlsz])
minfilt2不是内置的函数,你需要在matlab官网上下载这个文件
http://www.mathworks.com/matlabcentral/fileexchange/1358
把这个m文件放在工作路径下面就没问题了。
function dark = darkChannel(imRGB)r=imRGB(:,:,1)
g=imRGB(:,:,2)
b=imRGB(:,:,3) 分别提取三色的灰度图
[m n] = size(r) 提取单色图矩阵的宽度和长度
a = zeros(m,n) 创建m*n的零矩阵a
for i = 1: m
for j = 1: n
a(i,j) = min(r(i,j), g(i,j))
a(i,j)= min(a(i,j), b(i,j)) 依次比较三色分量的最小值提取为暗通道图
end
end
d = ones(15,15) 创建15*15的单位矩阵
fun = @(block_struct)min(min(block_struct.data))*d
dark = blockproc(a, [15 15], fun) 将图片分成15*15的小块并将每一块变成其中的最小值
dark = dark(1:m, 1:n)
我也是新手啊兄弟只能帮你到这儿了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)