【发布时间】:2011-06-03 11:15:06
【问题描述】:
我的一个过程产生 256 个二进制(逻辑)矩阵,一个用于灰度源图像的每一级。
代码如下:
so = imread('bio_sd.bmp');
co = rgb2gray(so);
for l = 1:256
bw = (co == l); % Binary image from level l of original image
be = ordfilt2(bw, 1, ones(3, 3)); % Convolution filter
bl(int16(l)) = {bwlabel(be, 8)}; % Component labelling
end
我获得了一个包含 256 个二进制图像的单元阵列。如果该位置的源图像像素与二值图像的索引具有相同的级别,则这样的二值图像包含 1。
即。二值图像 bl{12} 包含 1,其中源图像的像素级别为 12。
我想通过将 256 个二进制矩阵组合回灰度图像来创建新图像。
但我对 Matlab 很陌生,我想知道是否有人可以帮我编写代码:)
ps:我使用的是matlab R2010a学生版。
【问题讨论】:
-
你能确定每个像素都有一个“1”和 255 个“0”吗?如果不是,应该如何解决冲突?
-
不,源图像的每个像素都有一个级别值。如果该位置的源图像像素与二值图像的索引具有相同的级别,则二值图像包含 1。
-
查看您在编辑问题时添加的代码:我认为您应该非常仔细地查看您的代码实际执行的操作,与您认为的操作相比,以及函数的文档你用。例如,bwlabel 可以轻松返回大于 1 的值,这与您的想法相反。我不认为当前的代码接近你想要它做的......
-
对不起,我的问题似乎不够清楚。
-
@gnovice 很好地解释了您的代码的作用。请注意,原始代码的循环变量中也存在一个错误:灰度值将从 0 变为 255,因此循环变量
l不应上升到 256,而应该从 0 开始1.当然这意味着你不能直接使用l作为bl的索引,你需要使用l+1。
标签: matlab image-processing pixels grayscale