我正在試圖計算每個像素的平均值,只是左邊和右邊的鄰居,但在我的處理結束時,我只得到一個白色圖像,我找不到我的錯誤。這裏是我的代碼matlab中的平均濾波器
imageIn = imread('Prueba.jpg');
imageIn = rgb2gray(imageIn);
imageOut = zeros(size(imageIn));
ny = size(imageIn, 1);
nx = size(imageIn, 2);
imshow(imageIn);
u = [];
v = [];
tic
for i = 1:ny
u = imageIn(i,:);
v = zeros(1, ny);
for k = 2:ny-1
v(k) = (uint32(u(k-1))+uint32(u(k))+uint32(u(k+1)))/3;
end
%Special cases first and last pixel
v(1) = (uint32(u(2))+uint32(u(1))+uint32(u(2)))/3;
v(ny) = (uint32(u(ny-1))+uint32(u(ny))+uint32(u(ny-1)))/3;
imageOut(i,:) = v;
end
toc
imshow(imageOut);
任何想法?
你是如何處理邊緣案例?如果一個像素沒有左或右鄰居怎麼辦? – slayton
當它沒有左鄰居時,我使用兩次正確的像素,反之亦然。這就是'特殊情況'下面的行所做的(或應該做的)。 – BRabbit27
它已經很長時間了,我用matlab,但我想你可能會使用整數除法,它將返回一個整數,而不是一個浮點數?如果你省略了;我相信它會在運行時輸出var,所以每次處理完成後可能會輸出v? –