史蒂夫(Steve)与MATLAB进行图像处理

图像处理概念,算法和MATLAB

在实验室曲线中可视化染色外颜色

我今天在看一个古老的帖子, “基于实验室的统一颜色尺度”(2006年5月9日) 。我想提供一个更新,以说明现在从实验室转换为RGB颜色要比当时更容易转换为RGB颜色。但是,当我重读原始帖子时,我意识到当时我很天真地说,在实验室空间中使用路径构建colormap的可能性可能会在转换为SRGB时会导致木材外颜色。
考虑到它,我想我想做两个(或三个)后续职位。今天,第一个后续文章将重点放在一些方法上,以可视化实验室空间中的曲线在SRGB外面的曲线外。接下来,我将探索修改我先前演示的技术,以避免染色外颜色。
这是我在2006年5月9日帖子中展示的结肠菌:
半径= 50;
theta = linspace(0,pi/2,256)。';
a =半径 * cos(theta);
b =半径 * sin(theta);
l = linspace(0,100,256)。';
实验= [l,a,b];
显示colormap:
rgb = lab2rgb(lab);
ax = newplot;
颜色观看(AX,RGB,0)
daspect(ax,[30 1 1])
xlim(ax,[0 size(Lab,1)])
Ylim(斧头,[0 1.5])
轴(AX,“离开”
(功能 颜色观看 来自 使用MATLAB的数字图像处理(dipum3e) ,它包含在 本书的matlab代码文件 。)接下来的几行垂直缩小图形,以使显示的菌落上方和下方没有太多的空白空间。
无花果= ax.parent;
图(4)=图。位置(4)/3;
我在写2006年帖子时没有意识到的是,其中一些实验室颜色不在SRGB颜色空间的范围内。 我们可以确定 通过查看颜色组件值 RGB 看看是否有超出范围的 $ [0,1] $
rgb = lab2rgb(lab);
max(rgb(:))
ANS = 1.1271
最小(RGB(:))
ANS = -0.1144
这使我探索了不同的方式来可视化实验室曲线中哪些颜色的范围。(请注意,此讨论假设我们在谈论SRGB,这是由 LAB2RGB 。。下一个代码块在colormap中找到了所有与白膜外颜色的连续段。
OUT_OF_GAMUT_MASK =任何(RGB> 1,2)|任何(RGB <0,2);
d = diff([0; out_of_gamut_mask; 0]);
首先=查找(d == 1)
首先= 2×1
1 211
last = find(d == -1)-1
最后= 2×1
61 256
第一的 最后的 高于实验室颜色 实验室(1:61,:) 实验室(211:256,:) 不在SRGB范围内。现在使用这些数字添加 范围警报 指示器(红色条)到显示的菌落。
抓住
y = [1.25 1.25];
为了k = 1:长度(第一)
x1 = first(k)-1;
x2 = last(k);
x = [x1 x2];
情节(ax,x,y,“ R”,线宽= 5)
结尾
抓住离开
另一种可视化方法是绘制由红色,绿色和蓝色颜色组件值返回的 LAB2RGB 并显示这些值太高或太低的位置。
数字
抓住
情节(rgb(:,1),'r'
情节(rgb(:,2),'G'
情节(rgb(:,3),'b'
XLIM([1-0.05*高度(RGB),1.05*高度(RGB)]);
y1 = min(-0.2,ax.ylim(1));
y2 = max(1.2,ax.ylim(2));
Ylim([Y1 Y2]);
网格(“上”
yline(0,线宽= 5,颜色= [0.7 0.7 0.7])
yline(1,线宽= 5,颜色= [0.7 0.7 0.7])
TOO_HIGH =任何(RGB> 1,2);
k = find(Too_high);
如果〜Isempty(k)
情节(k,一个(size(k)),'r*',Markersize = 6)
结尾
TOO_LOW =任何(RGB <0,2);
k = find(too_low);
如果〜Isempty(k)
情节(k,zeros(size(k)),'r*',Markersize = 6)
结尾
抓住(“离开”
标题(“带有域警报的RGB值”
接下来,我想向 一个 b 摩托外实验室曲线颜色的值。
绘图(实验室(:,2),实验(:,3));
平等的
xlim([ - 110 110])
Ylim([ - 110 110])
ax = gca;
ax.xaxislocation =“起源”;
ax.yaxislocation =“起源”;
Xlabel(“一个”
ylabel(“ B”
抓住
为了k = 1:长度(第一)
j1 = first(k);
j2 = last(k);
X =实验室(J1:J2,2);
y =实验室(J1:J2,3);
情节(x,y,“ R”,线宽= 5)
结尾
抓住离开
网格(斧头,“上”
标题(“ A-B值,带有凸线警报”
最后,我想展示 l 摩托外实验室曲线颜色的值。
绘图(实验室(:,1));
Xlim([1-0.05*高度(实验室),1.05*高度(LAB)]);
Ylim([ - 10 110])
抓住
为了k = 1:长度(第一)
j1 = first(k);
j2 = last(k);
X = J1:J2;
y =实验室(J1:J2,1);
情节(x,y,“ R”,线宽= 5)
结尾
抓住离开
网格
标题(“ l量子警报的值”
我创建了一些生成这些不同图的实用程序功能。他们在这篇文章的结尾。我会用 Tiledlayout 将所有四个图组合在一个图中。
Tiledlayout(2,2)
Nexttile
PlotLabColorMapWithGamutalArm(实验室)
Nexttile
plotlabrgbcolorswithgamutalarm(实验室)
标题(“ RGB值”
Nexttile
plotabwithgamutalarm(实验室)
标题(“ A-B值”
Nexttile
plotlwithgamutalarm(实验室)
标题(“ L值”

实用程序功能

功能PlotLabColorMapWithGamutalArm(实验室)
[首先,最后] = outofgamutsegments(lab);
rgb = lab2rgb(lab);
ax = newplot;
颜色观看(AX,RGB,0)
daspect(ax,[30 1 1])
xlim(ax,[0 size(Lab,1)])
Ylim(斧头,[0 1.5])
轴(AX,“离开”
保持(斧头,“上”
y = [1.25 1.25];
为了k = 1:长度(第一)
x1 = first(k)-1;
x2 = last(k);
x = [x1 x2];
情节(ax,x,y,'r',线宽= 5)
结尾
保持(斧头,“离开”
结尾
功能plotlabrgbcolorswithgamutalarm(实验室)
ax = newplot;
rgb = lab2rgb(lab);
保持(斧头,“上”
情节(AX,RGB(:,1),,'r'
情节(AX,RGB(:,2),,'G'
情节(AX,RGB(:,3),,'b'
Xlim(ax,[1-0.05*高度(RGB),1.05*高度(RGB)]);
y1 = min(-0.2,ax.ylim(1));
y2 = max(1.2,ax.ylim(2));
Ylim(ax,[y1 y2]);
网格(斧头,“上”
yline(ax,0,线宽= 5,颜色= [0.7 0.7 0.7])
Yline(AX,1,线宽= 5,颜色= [0.7 0.7 0.7])
TOO_HIGH =任何(RGB> 1,2);
k = find(Too_high);
如果〜Isempty(k)
情节(ax,k,一个(大小(k)),'r*',Markersize = 6)
结尾
TOO_LOW =任何(RGB <0,2);
k = find(too_low);
如果〜Isempty(k)
情节(ax,k,zeros(size(k)),'r*',Markersize = 6)
结尾
保持(斧头,“离开”
结尾
功能plotabwithgamutalarm(实验室)
ax = newplot;
绘图(ax,lab(:,2),实验(:,3));
轴(AX,“平等的”
xlim(ax,[-110 110])
Ylim(斧头,[-110 110])
ax.xaxislocation =“起源”;
ax.yaxislocation =“起源”;
Xlabel(“一个”
ylabel(“ B”
[首先,最后] = outofgamutsegments(lab);
抓住
为了k = 1:长度(第一)
j1 = first(k);
j2 = last(k);
X =实验室(J1:J2,2);
y =实验室(J1:J2,3);
情节(ax,x,y,'r',线宽= 5)
结尾
抓住离开
网格(斧头,“上”
结尾
功能plotlwithgamutalarm(实验室)
ax = newplot;
情节(AX,LAB(:,1));
xlim(ax,[1-0.05*高度(实验),1.05*高度(实验)]);
Ylim(斧头,[-10 110])
[首先,最后] = outofgamutsegments(lab);
抓住
为了k = 1:长度(第一)
j1 = first(k);
j2 = last(k);
X = J1:J2;
y =实验室(J1:J2,1);
情节(ax,x,y,'r',线宽= 5)
结尾
抓住离开
网格(斧头,“上”
结尾
功能[首先,最后] = outofgamutsegments(实验室)
rgb = lab2rgb(lab);
OUT_OF_GAMUT_MASK =任何(RGB> 1,2)|任何(RGB <0,2);
d = diff([0; out_of_gamut_mask; 0]);
首先= find(d == 1);
last = find(d == -1)-1;
结尾
|
  • 打印
  • 发送电子邮件

注释

要发表评论,请单击这里登录您的数学帐户或创建一个新帐户。