I have this image (8 bit, pseudo-colored, gray-scale):
我想在其边界周围创建一个特定度量的强度带。
我尝试了腐蚀和其他数学运算,包括过滤以实现所需的频带,但一旦我使用腐蚀来切割部分边界,实际图像强度就会发生变化。
到目前为止我的代码如下所示:
clear all
clc
x=imread('8-BIT COPY OF EGFP001.tif');
imshow(x);
y = imerode(x,strel('disk',2));
y1=imerode(y,strel('disk',7));
z=y-y1;
figure
z(z<30)=0
imshow(z)
我使用它遇到的主要问题是它在某种程度上改变了原始图像的强度,如下所示:
所以我的问题是,如何在不改变原始图像的任何其他属性的情况下创建这样一个跨图像边界的带?
根据烧杯所讨论的内容以及您想要完成的操作,我个人会将您的图像转换为二进制文件,其中false
代表背景和true
代表前景。完成后,您可以使用良好的结构元素来侵蚀该图像,该元素保留了对象轮廓的圆度(disk
在你的例子中)。
其输出将是图像中大型物体的内部。你能做的就是使用这个面具将图像中的这些位置设置为黑色这样您就可以保留外带。因此,尝试做这样的事情:
%// Read in image (directly from StackOverflow) and pseudo-colour the image
[im,map] = imread('https://i.stack.imgur.com/OxFwB.png');
out = ind2rgb(im, map);
%// Threshold the grayscale version
im_b = im > 10;
%// Create structuring element that removes border
se = strel('disk',7);
%// Erode thresholded image to get final mask
erode_b = imerode(im_b, se);
%// Duplicate mask in 3D
mask_3D = cat(3, erode_b, erode_b, erode_b);
%// Find indices that are true and black out result
final = out;
final(mask_3D) = 0;
figure;
imshow(final);
让我们慢慢看一下代码。前两行获取 PNG 图像,其中包含灰度图像和彩色图,我们将这两个图像读入 MATLAB。接下来,我们使用ind2rgb http://www.mathworks.com/help/matlab/ref/ind2rgb.html将图像转换为其伪彩色版本。完成此操作后,我们将使用灰度图像并对图像进行阈值处理,以便捕获所有对象像素。我将图像的阈值设置为 10,以避免图像中出现的一些量化噪声。我们将对该二值图像进行操作,以确定我们想要设置为 0 以获得外边框的像素。
接下来,我们声明一个结构元素,它是一个半径为 7 的圆盘,然后腐蚀掩码。完成后,我以 3D 方式复制此蒙版,使其具有与伪彩色图像相同数量的通道,然后使用蒙版的位置将对象内部的值设置为 0。结果将是原始图像,但保留所有对象的外部轮廓。
我得到的结果是:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)