gpt4 book ai didi

matlab - Matlab 中的矢量化像素加倍插值

转载 作者:行者123 更新时间:2023-12-02 21:28:12 26 4
gpt4 key购买 nike

我有一个由 8 个单位组成的 NxMx3 矩阵,其中每个 (x,y,:) 都是 RGB 值的向量。我试图通过简单地将东部和南部的相邻值复制一个像素来进行像素加倍插值。

eastNeighbors = [img(2:end,:,:)];
southNeighbors = [img(:,2:end,:)];

filtered = img + eastNeighbors + southNeighbors;

问题是我收到“数组维度必须与二进制数组操作匹配”。错误。

如何分别向 eastNeighbors 和 SouthNeighbors 添加一行和一列 [0, 0, 0] 元素?

编辑:实际上,难道不应该有一种方法可以用filter2来实现这一点吗?这基本上是 FIR 滤波器 out(x,y) = in(x,y) + in(x-1, y-1),对吗?

尝试过这个:

h = [[1 1] [1 1]];

filtered = filter2(h, img);

收到“输入参数不足”。错误。

最佳答案

这可能就是你想要的 -

方法 1:使用 nlfilter用于滑动邻域操作

fun1 = @(x) sum([x(2,2) x(3,2) x(2,3)]);
OUTPUT_IMG = nlfilter(INPUT_IMG, [3 3], fun1);%%// INPUT_IMG is a gray image

方法 2:通过用 padarray 填充零来使用直接求和匹配矩阵大小

southNeighbors = padarray(INPUT_IMG(2:end,1:end),[1 0],'post');
eastNeighbors = padarray(INPUT_IMG(1:end,2:end),[0 1],'post');
OUTPUT_IMG = INPUT_IMG + eastNeighbors + southNeighbors;

一般说明:

如果您正在寻找插值,也许您想要找到这三个像素的平均值,因此除以3。请注意 uint8 数据类型,因为它会在求和时截断 255 处的值。

此外,您可能希望保持最后一行和最后一列与原始图像中的相同,因为它们没有东边和南边的相邻像素,因此请使用此 -

OUTPUT_IMG(:,end) = INPUT_IMG(:,end); 
OUTPUT_IMG(end,:) = INPUT_IMG(end,:);

关于matlab - Matlab 中的矢量化像素加倍插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22996406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com