作业帮 > 综合 > 作业

这是关于“基于单幅图像的去雾算法研究”中matlab代码 ,特别是win_size =

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/17 21:25:57
这是关于“基于单幅图像的去雾算法研究”中matlab代码 ,特别是win_size =
img_name='imagel.jpg';
% 原始图像
I=double(imread(img_name))/255;
% 获取图像大小
[h,w,c]=size(I);
win_size = 7;
img_size=w*h;
dehaze=zeros(img_size*c,1);
dehaze=reshape(dehaze,h,w,c);
%figure,imshow(I);
win_dark=zeros(img_size ,1);
for cc=1:img_size
win_dark(cc)=1
end
win_dark=reshape(win_dark,h,w);
%计算分块darkchannel
for j=1+win_size:w-win_size
for i=win_size+1:h-win_size
m_pos_min = min(I(i,j,:));
for n=j-win_size:j+win_size
for m=i-win_size:i+win_size
if(win_dark(m,n)>m_pos_min)
win_dark(m,n)=m_pos_min;
end
end
end
end
end
figure,imshow(win_dark);
for cc=1:img_size
win_dark(cc)=1-win_dark(cc);
end
%选定精确dark value坐标
win_b = zeros(img_size,1);
for ci=1:h
for cj=1:w
if(rem(ci-8,15)
这是2009年香港中文大学学生何恺明发表在CPVR上的文章《Single Image Haze Removal Using Dark Channel Prior》的源代码,但应该不是他本人写的.
图像是由一个个像素点组成的,而文章中对像素点的操作是针对以这个像素点为中心、大小为15*15的矩形区域进行的,所以win_size=7.其实定义为多少都没关系,可能在他看来7效果更好.
至于其他的语句,建议你把这篇文章下载下来,看看,文章中讲述的去雾原理其实很简单,讲的也很清楚.但是这个源代码好像有些地方和他讲的不太一样,这不本质.
再问: 非常谢谢你的回答!我还想问下,由于图像一般在400*600左右,但是这段代码要求图像要是在200*300左右,所以matlab 7.1运行时,总是提示:out of memory ,也就是超出内存,请问要怎么解决呢?
再问: 您好!非常满意您的回答!还还想请问下这个问题该怎么解决,这段代码要求图片大小在200*300左右,但是我的有雾图片大小都在400*600左右,用matlab 7.1运行,总是提示:out of memory 。也就是内存不够,要怎么解决呢?
再答: 具体的算法我们实现过,不过看它的代码里容易造成内存溢出的就是这三条语句: vals=vals(1:len); row_inds=row_inds(1:len); col_inds=col_inds(1:len); 他的len这个变量会非常大,以致matlab保存不了vals这个矩阵。所以需要修改一下他的soft matting这一步的算法。你可以按照这个思路修改一下。
再问: 还是不知道怎么修改,你帮忙再提示下,谢谢!
再答: 具体实现我没实现过,只是想了一下,不知道你下载这篇文章了么? 我的想法是上述源码中 %显示分块darkchannel %figure, imshow(win_dark); 之前的可以保留,但是后面的就需要重新写了。 具体的就是之前我们已经计算得到transmission矩阵t~了。 再求出Matting Laplacian matrix,也就是矩阵L 最后利用方程(L + λU)t = λ~,求解出soft后的矩阵t。这一步是为了使得到的图像更平滑、清晰。 最后利用文章中式16恢复源图像的RGB值即可实现去雾的效果。 具体的代码实现我没有写过,不过上面是作者提出的算法流程。 希望能够帮助你!
再问: 可以给我你的QQ号吗,我想跟您商量些事!!