比方說,我想要反轉圖像的顏色,並寫了三個函數來完成此操作。imshow顯示等矩陣的不同圖像?
negativea.m:
function [negative] = negativea (image)
negative = 255 - image;
end
negativeb.m
function [negative] = negativeb (image)
[rows, columns, channels] = size(image);
negative = zeros(rows, columns, channels);
for i = 1:rows
for j = 1:columns
for c = 1:channels
negative(i, j, c) = 255 - image(i, j, c);
end
end
end
end
negativec.m
function [negative] = negativec (image)
[rows, columns, channels] = size(image);
negative = image;
for i = 1:rows
for j = 1:columns
for c = 1:channels
negative(i, j, c) = 255 - image(i, j, c);
end
end
end
end
顯然,一個是最快的八度。 b和c之間的唯一區別是negative
的初始化,但存儲的值從不在函數中讀取,只寫入。 Unsuprisingly,所有產生的圖像是相等的:
>> img = imread('logo.png');
>> nega = negativea(img);
>> negb = negativeb(img);
>> negc = negativec(img);
>> isequal(nega, negb) && isequal(negb, negc)
ans = 1
然而,在圖中繪製的所有圖像時,在B圖像不被正確地繪製:
>> subplot(1,4,1); imshow(img);
>> subplot(1,4,2); imshow(nega);
>> subplot(1,4,3); imshow(negb);
>> subplot(1,4,4); imshow(negc);
給出了這樣的結果http://i.imgur.com/T7J4AEW.png B的顏色是不正確倒置。
現在我的問題很簡單。爲什麼?
P.S。:在Windows 10(64)
P.P.S:八度標誌也許示例使用八度4.0.1被嚴重選擇,因爲它有一個alpha通道。然而,Alpha通道似乎被刪除了imread
,因爲通道數量是3,並且對於沒有Alpha通道的圖像我有完全相同的問題。這似乎不會導致問題。
看看函數[' (http://octave.sourceforge.net/image/function/imcomplement.html),而不是自己寫(或者至少看看它看看如何以最有效的方式做到這一點)。 – carandraug