gpt4 book ai didi

c++ - 在二进制 {0, 255} 图像中找到中值时消除分支

转载 作者:可可西里 更新时间:2023-11-01 17:25:54 31 4
gpt4 key购买 nike

我有一个二进制图像,二进制值是0或255。图像数据的类型是unsigned char。这里我需要对这张图片做一个中值滤波。

我认为使用直方图 来查找中位数应该很快。用一些代码来解释:

unsigned int hist[2] = {0, 0};

for (int i = 0; i < kernel_h; ++i) {
for (int j = 0; j < kernel_w; ++j) {
if (image(i,j) == 0) {
hist[0]++;
}
else {
hist[1]++;
}
}
}

然后,我们可以非常快速地得到中值。但是由于这种情况,代码还是可以改进的:

int counter = 0;

for (int i = 0; i < kernel_h; ++i) {
for (int j = 0; j < kernel_w; ++j) {
if (image(i,j) == 0) {
counter++
}
else {
counter--;
}
}
}

但我想知道是否有其他方法可以消除 if-else 分支,例如使用位操作将 {0, 255} 映射到某个东西,这样我们就可以只更新标志而无需分支。

有人有什么建议吗?

最佳答案

255 的所有位都是 1,因此您可以将“if”简化为:

hist[image(i,j) & 1]++;

如果你想使用计数器你可以这样做:

counter += (image(i,j) & 2)-1;

关于c++ - 在二进制 {0, 255} 图像中找到中值时消除分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19174518/

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