jeffjeff 发表于 2007-11-26 09:54

奇怪的图像输出问题

奇怪的图像问题!I=imread('1.jpg');
=size(I);
D1=zeros(x,y);
D2=zeros(x,y);
DoubleI=double(I);
I0=zeros(x,y,z);
for i=1:x
for j=1:y
    % D1(i,j)=sqrt((DoubleI(i,j,1)-90)^2+(DoubleI(i,j,2)-90)^2+(DoubleI(i,j,3)-90)^2);
    % D2(i,j)=sqrt((DoubleI(i,j,1)-110)^2+(DoubleI(i,j,2)-110)^2+(DoubleI(i,j,3)-110)^2);
   
         %if (D1(i,j)<=D2(i,j))
         if (I(i,j,1)<=80)&&(I(i,j,2)<=80)&&(I(i,j,3)<=80)
             I0(i,j,1)=0;
             I0(i,j,2)=0;
             I0(i,j,3)=0;
         else
             %I0(i,j,1)=DoubleI(i,j,1);
             %I0(i,j,2)=DoubleI(i,j,2);
             %I0(i,j,3)=DoubleI(i,j,3);
             I0(i,j,1)=I(i,j,1);
             I0(i,j,2)=I(i,j,2);
             I0(i,j,3)=I(i,j,3);
          end
   end
end
f=rgb2gray(I0);
b=double(f);
imtool(b)    %%%%如图2,b.jpg
c=im2bw(b,0.9);
se=strel('disk',2);
bw1=imopen(c,se);
bw1=imclearborder(bw1);
imtool(bw1);%%%如图3,bw1.jpg
这时的bw1如图3中也就是bw1图像已经是全部黑色的了,图2中的中心部分的“缺陷”就是被
“se=strel('disk',2);
bw=imopen(c,se);
bw=imclearborder(bw);”这三句话给弄没了!
※※※※※※※※※※※※※※※※※※※※※※※※※※
※※※※※※※※※※※※※※※※※※※※※

但是当我把这个程序分开后,分为以下两个程序。却能够运行出如图6中的结果。(正是我想要的结果!)
第一个:
I=imread('1.jpg');
=size(I);
D1=zeros(x,y);
D2=zeros(x,y);
DoubleI=double(I);
I0=zeros(x,y,z);
for i=1:x
for j=1:y
    % D1(i,j)=sqrt((DoubleI(i,j,1)-90)^2+(DoubleI(i,j,2)-90)^2+(DoubleI(i,j,3)-90)^2);
    % D2(i,j)=sqrt((DoubleI(i,j,1)-110)^2+(DoubleI(i,j,2)-110)^2+(DoubleI(i,j,3)-110)^2);
   
         %if (D1(i,j)<=D2(i,j))
         if (I(i,j,1)<=80)&&(I(i,j,2)<=80)&&(I(i,j,3)<=80)
             I0(i,j,1)=0;
             I0(i,j,2)=0;
             I0(i,j,3)=0;
         else
             %I0(i,j,1)=DoubleI(i,j,1);
             %I0(i,j,2)=DoubleI(i,j,2);
             %I0(i,j,3)=DoubleI(i,j,3);
             I0(i,j,1)=I(i,j,1);
             I0(i,j,2)=I(i,j,2);
             I0(i,j,3)=I(i,j,3);
          end
   end
end
BW=~im2bw(I0);
imwrite(BW);
%%%%保存的图片为图片4,1a.jpg
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
第二个程序:
f=imread('1.jpg');%%这张照片就是图片4,1a.jpg
whos f
imshow(f);
b=double(f);
whos b
imtool(b)%%%如图5,5.jpg
c=im2bw(b,0.9);
se=strel('disk',2);
bw=imopen(c,se);
bw=imclearborder(bw);
whos bw
imtool(bw);%%%如图6.jpg
而这两个程序区别就是把图保存出去然后又把二值图像读进来就可以显示出如图6.jpg的图像来。
怎么改能把最上面的整个程序也能整出如图6.jpg的图像呢?!



[ 本帖最后由 jeffjeff 于 2007-11-26 15:12 编辑 ]

花如月 发表于 2007-11-26 13:55

图太多了,不知道你的问题到底在哪儿。


图像保存问题有帖讨论过,请搜索或者在置顶帖子里找

[ 本帖最后由 花如月 于 2007-11-26 16:07 编辑 ]

jeffjeff 发表于 2007-11-26 15:06

原帖由 花如月 于 2007-11-26 13:55 发表 http://www.chinavib.com/forum/images/common/back.gif
图太多了,不知道你的问题到底在哪儿。


图像保存问题有转帖讨论过,请搜索或者在置顶帖子里找
花版主,我遇到的不是保存问题。最上面的一个长的程序是我遇到的问题程序。就是对'1.jpg'图像处理后,经过颜色聚类处理后的I0将其灰度化double后显示为如图2,b.jpg。然后经过
c=im2bw(b,0.9);
se=strel('disk',2);
bw1=imopen(c,se);
bw1=imclearborder(bw1);
imtool(bw1);%%%如图3,bw1.jpg
这时的bw1如图3中也就是bw1图像已经是全部黑色的了,图2中的中心部分的“缺陷”就是被
“se=strel('disk',2);
bw=imopen(c,se);
bw=imclearborder(bw);”这三句话给弄没了!
但是,我将这整个程序分开后,也就是第一部分为颜色聚类处理后得到I0,然后BW=~im2bw(I0);
imwrite(BW);
%%%%保存的图片为图片4,1a.jpg
第二部分程序是重新读入这个被保存的图片4,1a.jpg。然后进行余下的处理。就能够显示得到图片6中的缺陷区域。
如何能够不保存”imtool(bw1)“,在读入“f=imread('1.jpg');%%这张照片就是图片4,1a.jpg”。的,将最上面的整个的程序来最后如图片6中得到的缺陷区域。


花如月 发表于 2007-11-26 16:33

I=imread('1.jpg');
gray=rgb2gray(I);
BW=im2bw(gray,graythresh(gray));
imshow(BW);
se=strel('disk',2);
se1=strel('disk',5);
bw1=imopen(~BW,se);
bw1=imclearborder(bw1);
result=imopen(bw1,se1);
figure,imshow(result)
试试看

jeffjeff 发表于 2007-11-26 17:25

效果还可以!谢谢!
页: [1]
查看完整版本: 奇怪的图像输出问题