我想在matlab中计算这个公式
[m,n,d]=size(img1);
matrix1=sum(abs(img1-img2));
a= matrix1/ m*n ;
b=a*100;
其中img1,img2是尺寸为512*512*3的两张图像
目标是获得单个数值,但我得到一个矩阵。对于具有 i 行和 j 列的矩阵 A,B,实际公式为= (summation [abs(A(i,j)- B(i,j))] / m*n ) * 100
获得百分位数
我知道它很简单,但我想我错过了一些东西!
您的图像矩阵是 3D 的事实表明它们是真彩色 RGB 图像 http://www.mathworks.com/help/techdoc/creating_plots/f2-10709.html#f2-12468。对于矩阵M
,第一个颜色平面M(:,:,1)
是红色分量,第二个颜色平面M(:,:,2)
是绿色分量,第三个颜色平面M(:,:,3)
是蓝色分量。由于您只讨论公式中前两个维度的求和,因此您必须弄清楚如何处理第三个维度。这里有几个选项:
-
将您的公式应用于每个颜色平面: 你可以通过调用函数来做到这一点SUM http://www.mathworks.com/help/techdoc/ref/sum.html两次,一次对列求和,然后再次对行求和。结果matrix1
将是一个 1×1×3 矩阵,可以使用该函数将其重塑为 3 元素列向量SQUEEZE http://www.mathworks.com/help/techdoc/ref/squeeze.html。向量中的每个元素将是每个颜色平面的总和:
matrix1 = squeeze(sum(sum(abs(img1-img2),1),2));
现在您可以使用逐元素乘法和除法运算符 http://www.mathworks.com/help/techdoc/ref/arithmeticoperators.html .*
and ./
计算最终结果:
a = matrix1./(m*n);
b = a.*100;
-
将图像转换为灰度:如果您只关心颜色强度,可以将真彩色 RGB 图像转换为 2-D灰度强度图像 http://www.mathworks.com/help/techdoc/creating_plots/f2-10709.html#f2-175使用该功能RGB2GRAY http://www.mathworks.com/help/toolbox/images/ref/rgb2gray.html来自图像处理工具箱 http://www.mathworks.com/help/toolbox/images/:
img1 = rgb2gray(img1);
img2 = rgb2gray(img2);
然后你可以打电话SUM http://www.mathworks.com/help/techdoc/ref/sum.html两次对行和列求和,或者使用单冒号索引 http://www.mathworks.com/help/techdoc/math/f1-85462.html#bq7egbu-1将每个图像重塑为列向量并调用SUM http://www.mathworks.com/help/techdoc/ref/sum.html once:
matrix1 = sum(sum(abs(img1-img2)));
%# OR...
matrix1 = sum(abs(img1(:)-img2(:)));
附加说明...
如果您的图像数据存储为整数类型 http://www.mathworks.com/help/techdoc/ref/uint8.html,您可能希望将图像数据转换为双精度浮点数 http://www.mathworks.com/help/techdoc/ref/double.html首先执行以下操作:
img1 = double(img1);
img2 = double(img2);
这将确保求和步骤的结果不会在整数类型可以容纳的最大值处饱和。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)