2016-07-25 213 views
3

我正在处理类似于以下的图像:a cell image,并且我只想提取红粉色部分。截至目前,我使用img(:,:,1)来提取红色值,但这会产生一个二进制图像。我想知道是否有办法提取“红色”值并根据其“红色”或强度程度生成灰度图像。任何帮助都是极好的。基于一个颜色通道的强度将RGB图像转换为灰度

+0

它不应该产生一个二进制图像。你为什么认为它是二元的?尝试'imagesc(img(:,:1))' – Suever

回答

2

您很可能使用imshow显示结果,它会自动将轴的颜色限制设置在01之间。您的图像是RGB,红色通道的值将从0255。因此,如果您只指定一个输入到imshow,您将得到一个图像,其中所有值>1将显示为白色,并且所有零值均为黑色。所以你的图像并不是真正的二进制,它只是出现那种方式

你想要么imagesc显示您的图片,它会自动缩放颜色范围来匹配数据:

imagesc(img(:,:,1)); 
colormap gray 

或者,您可以指定第二个输入imshow以使其也扩展到适合你的数据范围:

imshow(img(:,:,1), []) 

的原因,这是不是当你所有的可视化频道的问题是,如果你指定的红色,绿色和蓝色通道,这被认为是真彩色图像,所有轴色丽米特被忽略。

2

您捕获的数据将是正确的(并且是灰度),但可视化可能不正确。当试图想象一个二维矩阵(与你的结果img(:,:,1)),MATLAB应用默认颜色映射,其结果是:

[x,y]=meshgrid(1:200, 1:200); 
z=x.^2.*sin(y/max(y(:))*pi); 
figure;imagesc(z); 

enter image description here

如果你想避免应用jet颜色表,要么改变颜色表:

colormap('gray') 

enter image description here

或更改2D矩阵成3D一个,明确地指定的颜色显示(必须是与0之间的值1):

z3d = z(:,:,[1 1 1]); % more efficient than repmat 
z3d = (z3d - min(z(:)))./range(z(:)); % make sure values in range [0; 1] 

enter image description here

你看到条带在颜色表的版本,因为默认情况下一个颜色表contains 64 different colors; 3D矩阵版本没有这个问题,因为它直接显示颜色。

2

如果我可以添加到您的问题,在我看来,你只是试图分离(或组合)分离和可视化的红色,绿色和蓝色fluorofores。我特别认为这是因为你提到'粉红'。

这可能是更好的只是隔离通道:

>> F_red = F; F_red(:,:,[2,3]) = 0; 
>> F_green = F; F_green(:,:,[1,3]) = 0; 
>> F_blue = F; F_blue(:,:,[1,2]) = 0; 
>> F_pink = F; F_pink(:,:,2) = 0; 

这里有结果的次要情节:

enter image description here

此外,你应该知道,生产的“天真”的方式灰度图像不会保留人眼所感知的颜色的“亮度”,因为与“红色”和“蓝色”相同强度的“绿色”实际上将被视为由更亮的亮度为人类的眼睛,同样的“红色”比“蓝色”更亮。 Matlab提供了一个rgb2gray函数,它将rgb图像转换为正确保持亮度的灰度图像。这与您的纯粹的红色,绿色和蓝色转换无关,但对于“粉红色至灰度”图像可能需要考虑一些问题。例如,比较下面的两张图片,您会看到细微的对比差异。

>> F_pinktogray_naive = mean(F(:,:,[1,3]), 3); 
>> F_pinktogray_luminance = rgb2gray(F_pink); 

两个次要情节:

enter image description here

在某种意义上,你可能更关心的左边(幼稚)之一,因为你不关心的粉红的转换一个灰色的“视觉”,但你更关心的是红色和蓝色的氟化物在灰度图像上的强度是“可比较的”(因为它们代表测量值而不是视觉场景)。但在将rgb图像转换为灰度图时需要牢记这一点。

+0

对不起,为了澄清,底部图像是一个灰度图像,只是用'热'地图可视化,我认为结果比灰色地图更直观。此外,图像是用'imagesc'生成的,这意味着这些值被缩放(即最低为0,最高为1)。如果你不关心缩放比例(例如,imshow允许你指定这样的限制,或者你可以简单地将灰度通道复制到所有rgb通道,这样你就有一个灰色'rgb图像,因此imagesc不会缩放,但会将它们解释为rgb)。 –