【发布时间】:2018-02-28 15:15:27
【问题描述】:
我有以下代码:
close all;
star = imread('/Users/name/Desktop/folder/pics/OnTheBeach.png');
blrtype = fspecial('average',[3 3]);
blurred = imfilter(star, blrtype);
[rows,cols,planes] = size(star);
R = star(:,:,1); G = star(:,:,2); B = star(:,:,3);
starS = zeros(rows,cols);
ind = find(R > 190 & R < 240 & G > 100 & G < 170 & B > 20 & B < 160);
starS(ind) = 1;
K = imfill(starS,'holes');
stats = regionprops(logical(K), 'Area', 'Solidity');
ind = ([stats.Area] > 250 & [stats.Solidity] > 0.1);
L = bwlabel(K);
result = ismember(L,find(ind));
到目前为止,我加载了一张图像,模糊以滤除一些噪声,进行颜色分割以找到落在该范围内的特定对象,然后创建一个二进制图像,该图像的值1 用于对象的颜色,并且0 用于所有其他内容。最后,我进行区域过滤以去除图像中留下的任何杂波,这样我就只剩下我正在寻找的对象了。
现在我想根据分割蒙版对原始图像重新着色以改变海星的颜色。我想创建红色、绿色、蓝色通道,为它们分配值,然后将蒙版放在图像上。 (以红海星为例)
red = star;
red(starS) = starS(:,:,255);
green = star;
green(starS) = starS(:,:,0);
blue = star;
blue(starS) = star(:,:,0);
out = cat(3, red, green, blue);
imshow(out);
这给了我一个错误:索引超出矩阵维度。
Project4 中的错误(第 28 行) 红色(starS) = starS(:,:,255);
我目前的方法有什么问题?
【问题讨论】:
-
能否也提供原图?
-
original picture@TommasoBelluzzo
-
starS是一个二维矩阵。你为什么要访问starS(:,:,255)? -
基本我想将蒙版“starS”转换为 3D 矩阵,以便将其放置在原始图像上(那时它们的大小相同)。同时将其红色通道设置为最大值。我不知道如何做到这一点@CrisLuengo
-
您希望将其转换为 3D 矩阵,但第 3 维的大小应为 3。
starS(:,:,1)将是红色通道。starS(:,:,255)会是第 255 频道吗... :)