【问题标题】:Map downsampled image to original resolution - MATLAB将下采样图像映射到原始分辨率 - MATLAB
【发布时间】:2018-08-06 17:51:45
【问题描述】:

我有一个小的 3D 图像 (500x1000x100),想将像素缩减到 1%。然后我想将其映射回相同原始尺寸的二进制(真/假,1/0),其中下采样像素的相对位置为 1,其他一切为 0。

所以也许像:

small_im = imresize(im,0.01);
%create some sort of mapping
binary_tensor = %true wherever the downsampled image's pixels are present,       
                %relatively speaking. But of the same dims as im

编辑: 想象一张 100x100 的图像。将其下采样到 10x10。获取该下采样中的每个像素并将其映射回原始尺寸,并让它们在相同尺寸的二进制张量中为 TRUE

【问题讨论】:

    标签: arrays matlab multidimensional-array pixel


    【解决方案1】:

    如果能被 100 整除(或者可以乘以 1%),

    small_im=im(1:100:end,1:100:end,1:100:end);
    
    mask=false(size(im));
    mask(1:100:end,1:100:end,1:100:end)=true;
    

    【讨论】:

    • 现在实际的图片文件是512x1024x100。还有更多不同的维度。这看起来不错,但是当我看到像 3194x1041x658 这样的暗淡图像时可能会丢失一些细节
    • 另外,当我调用 sum(sum(sum(mask(:,:,:)))) 我得到 66,但考虑到我们正在选择所有像素,我相信它应该更接近 500k来自 5000 万个元素数组的 99% 下采样
    • @Alex 这里有些事情我可能误解了:1)我选择的是已在下采样图像中使用的 1%,而不是 99%。 2)如果你下采样到一个不能被比率整除的速率,你需要插值。为了让您的问题在这种情况下有意义,您需要定义插值方法以及如何选择将在下采样中使用的“部分”像素
    • 当然,让我尝试更好地解释它。我想将图像大小调整 n 倍,此处 n=0.01:small_im = imresize(im,0.01,'nearest); 然后从 small_im 中获取所有像素并将它们映射到与原始图像具有相同尺寸的逻辑/二进制数组。此逻辑数组在映射到 small_im 中像素的相对位置的单元格处应为真,否则为假。我希望这个 3d 逻辑数组中有 1% 的像素为真。感谢您的帮助,让我知道这是否有意义
    • @Alex 我的回答完全适用于 0.01 的乘数。我会尝试更新一般最近的邻居。
    猜你喜欢
    • 2015-07-12
    • 2022-01-15
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    相关资源
    最近更新 更多