求基于雾气遮罩去雾算法在matlab中的源程序代码

求基于雾气遮罩去雾算法在matlab中的源程序代码,第1张

function darktest(filename)

%暗影去雾算法

%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)

我也是新手啊兄弟只能帮你到这儿了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8168696.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存