残叶、 2019-04-18 19:47
浏览 1086

小白用matlab做图像阴影去除,求出现的问题如何解决?

1、代码:function shadowmask=hsishadowdetection(rgbimg)
%rgbimg='houston.tif'
rgbimg=imread('2.jpg');
figure,imshow(rgbimg);
rgbimg=imresize(rgbimg,[512,512],'bilinear');
figure,imshow(rgbimg);
imdir = 'result\';
imwrite(rgbimg,[imdir 'hsiorigin.jpg'],'resolution',72);
hsi=rgb2hsi(rgbimg);
ss=hsi(:,:,2);
ii=hsi(:,:,3);
ss=mat2gray(ss);
ii=mat2gray(ii);
rsi=(ss+1)./(ii+1);
dsi=ss-ii;
ndsi=(ss-ii)./(ss+ii);
rsi=mat2gray(rsi);
dsi=mat2gray(dsi);
ndsi=mat2gray(ndsi);
imwrite(ii,[imdir 'hsii.jpg'],'resolution',72);
imwrite(ndsi,[imdir 'ndsi.jpg'],'resolution',72);
% figure,imshow(rsi);pixval on
% figure,imshow(dsi);pixval on
% figure,imshow(ndsi);pixval on

hi=im2uint8(ndsi);
figure,imshow(hi);IMPIXELINFO%pixval on
hit=otsu(hi);
hit=50;
ii=im2uint8(ii);
figure,imshow(ii);IMPIXELINFO%pixval on
iit=otsu(ii);
iit=80;
imsize=size(hi);
hsimask=zeros(imsize);
hsimask1=hsimask;
hsimask2=hsimask;
hsimask1(find(hi>hit))=1;
hsimask2(find(ii hsimask=hsimask1 & hsimask2;
imwrite(hsimask1,[imdir 'imask.jpg'],'resolution',72);
imwrite(hsimask2,[imdir 'ndsimask.jpg'],'resolution',72);
imwrite(hsimask,[imdir 'mergemask.jpg'],'resolution',72);
% hsimask(find(hi>hit) & find(ii<iit))=1;
figure,imshow(hsimask);
WholeShadowMask=hsimask;

%% shadow number statistical
[ShadowRegion,ShadowNum] = bwlabel(WholeShadowMask,4);
% remove regions that have little area
AreaThreshold = 200;

for i=1:ShadowNum

SingleShadowMask = zeros(imsize);
SingleShadowMask(find(ShadowRegion == i)) = 1;

SingleArea = sum(SingleShadowMask(:));

if(SingleArea<AreaThreshold)
    WholeShadowMask(find(ShadowRegion == i)) = 0;
end;

end;
imwrite(WholeShadowMask,[imdir 'removesmallmask.jpg'],'resolution',72);
% close the mask
se = strel('disk',7);
shadowmask = imclose(WholeShadowMask,se);
figure;imshow(shadowmask);IMPIXELINFO%pixval on;
imwrite(shadowmask,[imdir 'shadowmask.jpg'],'resolution',72);

function hsi=rgb2hsi(image)
rgb_r=image(:,:,1);
rgb_g=image(:,:,2);
rgb_b=image(:,:,3);
[width,height]=size(rgb_r);
hsi=zeros(width,height,3);
hsi_h=hsi(:,:,1);
hsi_s=hsi(:,:,2);
hsi_i=hsi(:,:,3);
PI=3.1415956;
for i=1:width
for j=1:height
R=double(rgb_r(i,j));G=double(rgb_g(i,j));B=double(rgb_b(i,j));
min = R;
if (G < min)
min = G;
end
if (B < min)
min = B;
end
I =(R+G+B)/3;
S = 1 - min/I;
if (S == 0.0)
H = 0;
else
H = ((R-G)+(R-B))/2.0;
H = H/sqrt((R-G)*(R-G) + (R-B)*(G-B));
H = acos(H);
if (B > G)

H = 2*PI - H; 
     end 

H = H/(2*PI);
end
hsi_h(i,j)=H;hsi_s(i,j)=S;hsi_i(i,j)=I/255;
end
end
hsi(:,:,1)=hsi_h;
hsi(:,:,2)=hsi_s;
hsi(:,:,3)=hsi_i;

报错信息:
错误使用 imwrite (line 474)
无法打开要写入的文件 "result\hsiorigin.jpg"。您可能没有写入权限。

出错 hsishadowdetection (line 8)
imwrite(rgbimg,[imdir 'hsiorigin.jpg'],'resolution',72);

求教!!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 保护模式-系统加载-段寄存器