最佳答案
alulululu 发表于 2015-9-27 13:08 第一步相当于是用128作阈值进行二值化, 这个二值化和前面im2bw的区别是 这个结果是0和128,而不是0和255 这也就是I_7和G_7的区别。 为什么加起来能得到原图,关键在于理解bitand,和128做bitand就只留下了>=128的部分 而255 = 128+64+32+16+8+4+2+1,累加起来才能得到原图。 |
12 条回复
A>128 |
function B=change(A) [m,n]=size(A); for i=1:m for j=1:n if A(i,j)>128 B(i,j)=1; else B(i,j)=0; end end end |
singingplayer 发表于 2015-9-26 11:10 [m,n]=size(I); for k=0:1 for i=1:m for j=1:n if I(i,j)>(2^k) B(i,j)=1; else B(i,j)=0; end end end subplot(2,4,k+1);imshow(B) end figure; imshow(B); 你好,首先谢谢你。根据你的指导,我添加了一点,想显示一共八张图片,matlab提示B的容量不够,运行地非常慢 请问我应该怎么修改呢。因为一共需要做这样的八次,分别是大于128,64,32……为了显示不同的灰度平面。 |
|
你好。多谢指教。请问一下,计算阈值thresh的时候,如果除以255,thresh的范围应该是(0,1),而J本身范围是0~255的,这里不太明白。 |
alulululu 发表于 2015-9-27 11:26 是的,thresh的范围是0~1,这是由于im2bw函数里面都进行了归一化的缘故 如果不想这么写的话 可以使用2L的办法
|
zype1128 发表于 2015-9-27 11:38 好的。我明白了。谢谢你。:lol |
zype1128 发表于 2015-9-27 11:38 你好。请问我还可以再问你一个问题吗? I是一张灰度图片 G_7=bitand(I,128); I_7=im2uint8(mat2gray(G_7)); 这样得到的G_7和I_7有什么区别吗? 为什么把G_7~G_0相加后可以得到原图,而把I_7~I_0相加不能得到原图? |
alulululu 发表于 2015-9-27 13:08 第一步相当于是用128作阈值进行二值化, 这个二值化和前面im2bw的区别是 这个结果是0和128,而不是0和255 这也就是I_7和G_7的区别。 为什么加起来能得到原图,关键在于理解bitand,和128做bitand就只留下了>=128的部分 而255 = 128+64+32+16+8+4+2+1,累加起来才能得到原图。 |
本帖最后由 柚籽 于 2015-9-28 15:01 编辑 alulululu 发表于 2015-9-27 10:39 2楼就挺好的啊,怎么还用那么复杂的嵌套循环。。哦,没往下看,图像处理的。 im2bw |
zype1128 发表于 2015-9-27 14:11 嗯。还是有点迷惑。老师让我们得到八个灰度平面的图片,如果这样用128,84……做阈值比较的话好像和bitand的结果是不一样的。bitand(I,128)取的是二进制的第七位,和用128做阈值比较得到的结果是不一样的。老师让我们用两种方法得到八个灰度平面,我不知道还可以用啥方法。 |
Powered by Discuz! X3.4
© 2001-2022