Sha*_*nir 2 matlab image-processing
我有这个图像(8位,伪彩色,灰度):
我想在它的边界周围创建一个特定尺度的强度带.
我尝试了侵蚀和其他数学运算,包括过滤以达到所需的波段但实际图像强度会在我使用侵蚀切割部分边界时立即改变.
到目前为止我的代码看起来像:
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)
Run Code Online (Sandbox Code Playgroud)
我遇到的主要问题是它在某种程度上改变了原始图像的强度,如下所示:
所以我的问题是,如何在不改变原始图像的任何其他属性的情况下跨图像边界创建这样的带?
随着烧杯谈论和你想做什么,我会亲自将你的图像转换为二进制,false
代表背景并true
代表前景.完成后,然后使用一个良好的结构元素侵蚀此图像,该元素保留对象轮廓的圆度(disk
在您的示例中).
这个输出将是图像中大对象的内部.您可以做的是使用此蒙版并将图像中的这些位置设置为黑色,以便您可以保留外带.因此,尝试做这样的事情:
%// Read in image (directly from StackOverflow) and pseudo-colour the image
[im,map] = imread('http://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);
Run Code Online (Sandbox Code Playgroud)
我们慢慢来看看代码吧.前两行采用PNG图像,其中包含灰度图像和颜色图,我们将这两个图读入MATLAB.接下来,我们使用ind2rgb
将图像转换为伪彩色版本.一旦我们这样做,我们使用灰度图像并对图像进行阈值处理,以便捕获所有对象像素.我使用值10对图像进行阈值处理,以避免图像中出现的某些量化噪声.这个二进制图像是我们将要操作以确定我们想要设置为0以获得外边界的像素.
接下来,我们声明一个半径为7的磁盘的结构元素,然后侵蚀掩码.完成后,我在3D中复制此蒙版,使其与伪彩色图像具有相同数量的通道,然后使用蒙版的位置将对象内部的值设置为0.将是原始图像,但保留所有对象的外部轮廓.
我得到的结果是: