用MATLAB进行图像处理

图像处理概念、算法和MATLAB

Colormap测试图像

今天我想告诉你们我是如何以及为什么制作这些图像的:

在MATLAB R2014b发布后,我写了几篇博客(第1部分第2部分第3部分,第4部分)关于新的默认颜色映射,parula这是在那个版本中引入的。

过了一段时间,我看到了彼得·科维西的一些材料设计感知上统一的彩色地图(或者彼得写的彩色地图)。

我对Peter设计的一个测试图像特别感兴趣,这个测试图像是为了直观地评估彩色地图的感知特征。下面是测试图像:

图像是通过将一个正弦信号叠加在一个线性斜坡上而构建的,当你离开顶部一行时,正弦信号的振幅会变得更小。下面是图像的三个横截面:第1行、第64行和第128行。

url =“http://peterkovesi.com/projects/colourmaps/cm_MATLAB_gray256.png”;我= im2double (imread (url));subplot(3,1,1) plot(I(1,:)) axis([1 512 0 1]) title(的第一行) subplot(3,1,2) plot(I(64,:)) axis([1 512 0 1]) title(“64行”)子图(3,1,3)plot(I(128,:)) axis([1 512 0 1]) title(“128行”

下面是制作这个测试映像的基本代码。我要稍微改变一下柯维西的形象。我将添加一个额外的半周期正弦信号,使其在图像右侧达到峰值,我将在底部添加一个全范围线性斜坡部分。(如果你仔细观察上面的横截面曲线,你会发现线性斜坡从5%上升到95%。)

首先,计算斜坡。

num_cycles = 64.5;pixels_per_cycle = 8;一个= 0.05;宽度= pixels_per_cycle * num_cycles + 1;Height = round((width - 1) / 4);坡道= linspace(A, 1-A, width);

接下来,计算正弦曲线。

k = 0:(宽度);x = -A*cos((2*pi/pixels_per_cycle) * k);

现在,改变正弦信号的振幅与图像底部距离的平方。

q = 0:(高度1);Y = ((high - q) / (high - 1)).^2;y = (y') .* x;

把正弦信号叠加到斜坡上。

I = I1 +斜坡;

最后,在图像底部添加一个全范围线性斜坡部分。

= [I;repmat (linspace(0, 1,宽度),(身高/ 4),1)];clf imshow (I)标题(“Colormap测试图像”

上周,我发了帖子Colormap测试图像文件交换。它包含函数colormapTestImage它为你做了这一切。

我= colormapTestImage;

该函数还有另一种语法。如果您传递给它一个colormap的名称,它将使用该colormap显示测试图像。例如,这是用旧的MATLAB默认颜色图的测试图像,飞机

colormapTestImage (“喷气机”

这个测试图像说明了我们为什么要替换飞机作为MATLAB的默认颜色映射。我已经在下面的图片上标注了一些问题。

现在与新的默认颜色映射进行比较,parula

colormapTestImage (“parula”

我想这说明了我们想要达到的目标parula:数据的感知保真度。

因为我说的是parula,我将以提到我们需要一些非常微妙的调整来结束parulaR2017b版本。所以你可以比较一下,我给你看R2014b附带的原始版本。

colormapTestImage (“parula_original”

读者们,你能说出不同之处吗?请在评论中告诉我们。




发布与MATLAB®R2017a

|
  • 打印
  • 发送电子邮件

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。