matlab impyramid,图像 – Matlab impyramid问题
如果您實際打開了impyramid并查看了源代碼,那么歸結為一個imresize調用.具體來說,當A被定義為圖像時,在調用impyramid時使用expand時會發生這種情況:
M = size(A,1);
N = size(A,2);
scaleFactor = 2;
outputSize = 2*[M N] - 1;
kernel = makePiecewiseConstantFunction( ...
[1.25 0.75 0.25 -0.25 -0.75 -1.25 -Inf], ...
[0.0 0.125 0.5 0.75 0.5 0.125 0.0]);
kernelWidth = 3;
B = imresize(A, scaleFactor, {kernel, kernelWidth}, ...
'OutputSize', outputSize, 'Antialiasing', false);
如您所見,outputSize被定義為圖像維度減去1的兩倍,這就是每個維度偏離1個像素的原因.函數makePiecewiseConstantFunction是一個在impyramid中定義的局部函數.我會讓你打開它,親眼看看.在調用上面的代碼之前,請確保已定義.
因此,只需刪除1的減法即可實現您想要的效果.
因此,請調用上面的代碼,但將outputSize更改為:
outputSize = 2*[M N];
但是,如果您想要冒險,可以自己修改此源代碼以獲取一個標志,如果將其設置為true,則不會減1,false執行減法.因此,您可以修改impyramid的標頭來執行此操作:
function B = impyramid(A, direction, padding)
然后,在完成任何計算之前的開始,您可以這樣做:
if nargin == 2
padding = false;
end
這允許您在沒有第三個參數的情況下調用impyramid,默認情況下不會填充.
完成后,在if語句的expand部分中,您可以執行以下操作:
else
scaleFactor = 2;
outputSize = 2*[M N];
if ~padding %// Change
outputSize = outputSize - 1;
end
kernel = makePiecewiseConstantFunction( ...
[1.25 0.75 0.25 -0.25 -0.75 -1.25 -Inf], ...
[0.0 0.125 0.5 0.75 0.5 0.125 0.0]);
kernelWidth = 3;
end
然后,嵌套的if語句檢查您是否要允許輸出圖像的大小為2M x 2N或2M – 1 x 2N – 1.因此,當您完成修改代碼后,您可以執行以下操作:
scaled_result1_2 = impyramid(scale1_2, 'expand', true);
scaled_result1_4 = impyramid(impyramid(scale1_4,'expand', true), 'expand', true);
總結
以上是生活随笔為你收集整理的matlab impyramid,图像 – Matlab impyramid问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu - 安装hive
- 下一篇: T-SQL 字符串前加 N 是什么意思