用MATLAB进行图像处理

图像处理概念,算法和MATLAB

Superpixel多色调分色法

今天这篇博文的灵感来自于我的朋友、图像处理工具箱的开发者Alex Taylor写的一个例子。几年前,Alex使用工具箱算法来实现伪艺术的“分离”效果,就像这样:

imshow (“埃丁-角- 1000. png”

我认为这项技术很酷,值得展示。我还注意到这个例子使用了几个图像处理工具箱的函数,这些函数在产品中出现的时间不长,包括:

    rgb2lab

    lab2rgb

    imoverlay

    boundarymask

    superpixels

所以我意识到这将是一个向你们介绍一些你们可能不知道的工具箱新成员的好机会。

Rgb2lab和lab2rgb

这两个函数 rgb2lab而且 lab2rgb在R2014b中引入。它们在RGB空间和CIE L*a*b*空间之间转换。您可以在之前使用这些函数执行此转换 makecform而且 applycform,但这很尴尬。这些函数同时支持金宝appsRGB而且Adobe RGB (1998)

我在之前的几篇博客文章中提到过这些函数,包括"显示色域表面"而且“Out-of-gamut颜色。”

boundarymask

这个函数 boundarymask,在R2016a中添加,生成一个二值图像,如果你给它一个标签矩阵,它的前景像素描绘相邻标签之间的边界,或者如果你给它一个二值图像,它描绘前景和背景之间的边界。举个例子。

I = imread(“rice.png”);bw = imbinalize (I,“自适应”);掩码=边界掩码(bw);subplot(1,2,1)原始图像的) subplot(1,2,2)“边界面具”

imoverlay

这个函数 imoverlay,在R2016a中添加,用于突出显示图像中像素位置的子集。一个很好的例子是在原始图像的顶部显示上面计算的边界蒙版。

I_overlay = ioverlay (I,掩码,“黄色”);imshow (I_overlay)

在我写这个博客的第一年(2006年),我用这个名字写了自己的函数,并将它提交给了File Exchange。现在图像处理工具箱有了自己的版本,我可能很快就会从文件交换中删除我的版本。

superpixels

“超像素”只是一组具有相似颜色的连接像素。计算超像素已经在各种图像分析和计算机视觉任务中找到了固定的位置。图像处理工具箱功能 superpixels,在R2016a中引入,计算这些组。下面是一个计算超级像素并同时使用这两种像素的例子 boundarymask而且 imoverlay让它们形象化。

A = imread(“kobi.png”);L =超像素(A,1500);mask =边界掩码(L);B = imoverlay(A,掩码,“青色”);clf imshow (B)

Superpixel多色调分色法

由Alex实现的超像素分离方法首先使用 superpixels计算相似像素的簇。

下面是它的工作原理。

A = imread(“eddins-horn.png”);imshow (A)标题(原始图像的

接下来,计算和可视化超像素集群。

[L,N] = superpixels(A,1000);BW =边界掩码(L);imshow (imoverlay (BW,“青色”))

在下一步中,我想用簇颜色的平均值替换每个超像素簇中的像素。但我想计算L*a*b*空间的平均值,所以我从RGB转换为L*a*b*开始。

Alab = rgb2lab(A);

我将使用这个函数 label2idx计算每个超像素簇中像素的索引。这将允许我使用线性索引访问红色、绿色和蓝色组件值。

pixel_idx = label2idx(L);

对于每一个 N超像素簇,使用线性索引访问红色、绿色和蓝色分量,计算相应的平均值,并将这些平均值插入到L*a*b*输出图像中相应的像素位置。

Aplab = Alab;Ln =数字(L);k = 1:N idx = pixel_idx{k};Aplab(idx) = mean(Alab(idx));Aplab(idx+Ln) = mean(Alab(idx+Ln));Aplab(idx+2*Ln) = mean(Alab(idx+2*Ln));结束

最后,转换回RGB空间。

Ap = lab2rgb(Aplab);imshow(美联社)
|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。