- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
简介
背景:我在 MATLAB 中使用 watershed
算法分割图像。由于内存和时间限制,我更喜欢在子采样图像上执行此分割,假设调整大小为 0.45
。
问题:出于可视化目的和其他后期处理步骤,我无法正确将分割的输出重新缩放到原始图像比例。
最小工作示例
例如,我有这张图片:
我运行这个最小的脚本,我得到一个分水岭分割输出L
,它包含在一个标签图像中,其中每个连接的组件都用一个自然数和边界寻址连通分量之间为零值:
im_orig = imread('kitty.jpg'); % Load image [530x530]
im_res = imresize(im_orig, 0.45); % Resize image [239x239]
im_res = rgb2gray(im_res); % Convert to grayscale
im_blur = imgaussfilt(im_res, 5); % Gaussian filtering
L = watershed(im_blur); % Watershed aglorithm
现在我有了 L
,它的维度与 im_res
相同。 我如何使用存储在 L
中的结果 实际分割原始文件 im_orig
图像?
错误的解决方案
我尝试的第一种方法是使用 imresize
将 L
的大小调整为原始比例。
L_big = imresize(L, [size(im_orig,1), size(im_orig,2)]); % Upsample L
不幸的是,L
的上采样会产生一系列不需要的伪像。它尤其会丢失一些代表图像片段之间边界的基本零。这就是我的意思:
figure; imagesc(imfuse(im_res, L == 0)); axis auto equal;
figure; imagesc(imfuse(im_orig, L_big == 0)); axis auto equal;
我知道这是由于放大过程造成的模糊,但现在我想不出还有什么可以成功的。
我想到的唯一其他方法是使用数学形态学“放大”调整后图像的边界,然后进行上采样,但这仍然会导致一些不需要的伪像。
TL;DR(或重述)
有没有办法在 MATLAB 中对缩小后的图像执行分水岭
,然后将结果放大到原始图像,同时保持算法输出的清晰区域边界?我正在寻找的是一个完全荒谬的问题吗?
最佳答案
如果在放大图像后只需要分水岭段边界,则只需进行以下小改动:
L_big = ~imresize(L==0, [size(im_orig,1), size(im_orig,2)]); % Upsample L
这里是结果:
关于matlab - 高档 whatershed 输出以匹配原始图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42889867/
简介 背景:我在 MATLAB 中使用 watershed 算法分割图像。由于内存和时间限制,我更喜欢在子采样图像上执行此分割,假设调整大小为 0.45。 问题:出于可视化目的和其他后期处理步骤,我无
我是一名优秀的程序员,十分优秀!