簡體   English   中英

代碼不適用於Matlab中的圖像處理

[英]Code not working for image processing in matlab

我想在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以獲取百分位數我知道它很簡單,但是我想我缺少了一些東西!

您的圖像矩陣是3-D的事實表明它們是truecolor RGB圖像 對於矩陣M ,第一色平面M(:,:,1)是紅色分量,第二色平面M(:,:,2)是綠色分量,第三色平面M(:,:,3)是藍色成分。 由於您僅討論公式中前兩個維的求和,因此您將不得不弄清楚如何處理第三個維。 這里有幾個選擇:

  • 將您的公式應用於每個顏色平面 :可以通過調用兩次SUM函數來完成此操作,一次求和跨列,然后求和跨行求和。 結果matrix1將是一個1×1×3矩陣,可以使用函數SQUEEZE將其重塑為3元素列向量。 向量中的每個元素都是每個顏色平面的總和:

     matrix1 = squeeze(sum(sum(abs(img1-img2),1),2)); 

    現在,您可以使用逐元素乘和除運算符 .*./來計算最終結果:

     a = matrix1./(m*n); b = a.*100; 
  • 將圖像轉換為灰度 :如果只關心顏色強度,則可以使用圖像處理工具箱中的 RGB2GRAY函數將truecolor RGB圖像轉換為2D 灰度強度圖像

     img1 = rgb2gray(img1); img2 = rgb2gray(img2); 

    然后,您可以調用SUM兩次以對行和列求和,或者使用單冒號索引將每個圖像重塑為列向量並調用SUM一次:

     matrix1 = sum(sum(abs(img1-img2))); %# OR... matrix1 = sum(abs(img1(:)-img2(:))); 

另一注...

如果圖像數據以整數類型存儲,則可能需要通過執行以下操作首先將圖像數據轉換為雙精度浮點數

img1 = double(img1);
img2 = double(img2);

這將確保求和步驟的結果不會達到整數類型可以容納的最大值。

sum函數返回一個矩陣。 http://faculty.petra.ac.id/resmana/private/matlab-help/techdoc/ref/sum.html您的matrix1除以標量(等於512 * 512)-因此也將生成一個矩陣。 我相信您想將其除以m x n矩陣。

如果要除以標量,還需要在m * n周圍加上括號。

Edit Matrix1是1x512的行向量,因此您應將其除以512x1的列向量以獲得標量。 根據您的公式,我認為您正在尋找一個列向量,其中每個索引包含等於512 * 512的標量,但是請闡明您要解決的問題-即百分位數是什么意思?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM