我正在寫一段代碼,必須從RGB圖像轉換爲rgb標準化空間。我已經爲格式使用了,但運行速度太慢,我需要評估大量圖像。爲了加快速度,我試圖對矢量化函數進行全面的處理。我對當下如下:RGB轉換爲rgb規範。向量化
R = im(:,:,1);
G = im(:,:,2);
B = im(:,:,3);
r=reshape(R,[],1);
g=reshape(G,[],1);
b=reshape(B,[],1);
clear R G B;
VNormalizedRed = r(:)/(r(:)+g(:)+b(:));
VNormalizedGreen = g(:)/(r(:)+g(:)+b(:));
VNormalizedBlue = b(:)/(r(:)+g(:)+b(:));
NormalizedRed = reshape(VNormalizedRed,height,width);
NormalizedGreen = reshape(VNormalizedGreen,height,width);
NormalizedBlue = reshape(VNormalizedBlue,height,width);
的主要問題是,當它到達VNormalizedRed = r(:)/(r(:)+g(:)+b(:));
它會顯示內存不足的錯誤(至極真的很奇怪,因爲我剛剛解放了相同大小的三個矢量)。是錯誤嗎? (已解決)
它可能以更有效的方式執行相同的過程?
編輯:
使用馬丁sugestions後,我發現了重塑功能是沒有必要的,能夠做同樣的一個簡單的代碼:
R = im(:,:,1);
G = im(:,:,2);
B = im(:,:,3);
NormalizedRed = R(:,:)./sqrt(R(:,:).^2+G(:,:).^2+B(:,:).^2);
NormalizedGreen = G(:,:)./sqrt(R(:,:).^2+G(:,:).^2+B(:,:).^2);
NormalizedBlue = B(:,:)./sqrt(R(:,:).^2+G(:,:).^2+B(:,:).^2);
norm(:,:,1) = NormalizedRed(:,:);
norm(:,:,2) = NormalizedGreen(:,:);
norm(:,:,3) = NormalizedBlue(:,:);
您的代碼的新版本的注意事項:'R(:,:)'應該簡單地等同於'R' - 讓你應該能夠進一步縮短你的代碼,例如'NormalizedRed = R./sqrt(R.^2 + G.^2 + B.^2);' –