声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1183|回复: 4

[图像处理] 奇怪的图像输出问题

[复制链接]
发表于 2007-11-26 09:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
奇怪的图像问题!I=imread('1.jpg');
[x,y,z]=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');
[x,y,z]=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 编辑 ]

1

1

2

2

3

3

4

4

5

5

6

6
回复
分享到:

使用道具 举报

发表于 2007-11-26 13:55 | 显示全部楼层
图太多了,不知道你的问题到底在哪儿。


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

[ 本帖最后由 花如月 于 2007-11-26 16:07 编辑 ]
 楼主| 发表于 2007-11-26 15:06 | 显示全部楼层

花版主,我遇到的不是保存问题。最上面的一个长的程序是我遇到的问题程序。就是对'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)
试试看

评分

1

查看全部评分

 楼主| 发表于 2007-11-26 17:25 | 显示全部楼层
效果还可以!谢谢!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 14:42 , Processed in 0.109130 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表