Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB中二进制数到十进制数的转换_Matlab_Data Conversion - Fatal编程技术网

MATLAB中二进制数到十进制数的转换

MATLAB中二进制数到十进制数的转换,matlab,data-conversion,Matlab,Data Conversion,我在将二进制转换为十进制时遇到了一个问题(看起来很长) 可以换这条线吗 LBP(i,j)=I3(i-1,j-1)*2^8+I3(i-1,j)*2^7+I3(i-1,j+1)*2^6+I3(i,j+1)*2^5+I3(i+1,j+1)*2^4+I3(i+1,j)*2^3+I3(i+1,j-1)*2^2+I3(i,j-1)*2^1; 缩短时间?我不确定您在那里做什么,但确实做了您想做的事情?选项1: 简化操作的一种方法是,首先创建一个3乘3的比例因子矩阵(即二的幂),并在循环之前对其进行初始化:

我在将二进制转换为十进制时遇到了一个问题(看起来很长)

可以换这条线吗

LBP(i,j)=I3(i-1,j-1)*2^8+I3(i-1,j)*2^7+I3(i-1,j+1)*2^6+I3(i,j+1)*2^5+I3(i+1,j+1)*2^4+I3(i+1,j)*2^3+I3(i+1,j-1)*2^2+I3(i,j-1)*2^1;

缩短时间?

我不确定您在那里做什么,但确实做了您想做的事情?

选项1: 简化操作的一种方法是,首先创建一个3乘3的比例因子矩阵(即二的幂),并在循环之前对其进行初始化:

scale = 2.^[8 7 6; 1 -inf 5; 2 3 4];
然后,您可以使用这些矢量化操作替换循环中的所有内容:

temp = (I2(i-1:i+1,j-1:j+1) > I2(i,j)).*scale;
LBP(i,j) = sum(temp(:));
备选案文2: 或者,我相信您可以完全删除这两个循环,并用这个调用替换它们,以获得矩阵
LBP

LBP = nlfilter(I2,[3 3],@(x) sum((x(:) > x(5)).*scale(:)));

我正在使用该函数添加另一个解决方案

它包括将所有滑动窗口放入矩阵的列中,我们使用自定义函数处理这些列,然后将结果重新排列到原始矩阵中。在内部,它使用和函数

以下是一个例子:

I = imread('coins.png');
fun = @(b) sum( bsxfun(@times, 2.^(8:-1:1)', ...
           bsxfun(@gt, b([1 4 7 8 9 6 3 2],:), b(5,:))) );
II = colfilt(I, [3 3], 'sliding', fun);
imshow(II, [])

与的第二个答案相比,请阅读文档中的以下提示:

nlfilter处理大型图像可能需要很长时间。在某些情况下, colfilt函数可以更快地执行相同的操作


我仍然面临一个问题:我的直方图是错误的。不输出所有的numbers@cnn:上述两个选项的结果将略有不同。选项1将结果的边缘像素保留为0。选项2将通过零填充原始图像来填充它们以执行计算。要使两个结果匹配,必须忽略第一行和最后一行和最后一列。我不知道这是否是你直方图问题的根源,因为你没有给我足够的信息继续。我已经编辑了上面的代码。我使用的是选项1。我得到了2.5 x 10^4的1。我有点不对劲……但我不知道什么是错的?@cnn:我不知道会出什么问题,特别是考虑到你在
LBP
中的一个条目不能得到1的值(最低的非零值应该是2)。对于这个语句,temp=(I2(I-1:I+1,j-1:j+1)>J0)。*scale,我得到的值与scale相同。首先感谢您的回复。其次,当我在MATLAB中复制you函数时,它不起作用。为什么会这样?我仔细检查了一下,效果很好。。你能更具体地说明什么不适合你吗?
I = imread('coins.png');
fun = @(b) sum( bsxfun(@times, 2.^(8:-1:1)', ...
           bsxfun(@gt, b([1 4 7 8 9 6 3 2],:), b(5,:))) );
II = colfilt(I, [3 3], 'sliding', fun);
imshow(II, [])