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);
求教!!