Мне дается назначение для применения фильтра диапазона. Вот мой код для этого:Внедрение Rangefilt
I=imread('cameraman.tif');
I=im2double(I);
mkdir('./output_images/');
%Salt and pepper
SP= imnoise(I,'salt & pepper',0.004);
stemName='Salt&pepper';
OutputFileName = ['./output_images/' stemName '_noise.tif'];
imwrite(SP,OutputFileName);
[row col]=size(SP);
%SP=padarray(SP,[3 2],'replicate','both');
for i=2:row-1
for j=2:col-1
neigbours=[0 0 0; 0 0 0;0 0 0];
neibours(1,1)=SP(i-1,j-1);
neibours(1,2)=SP(i-1,j);
neibours(1,3)=SP(i-1,j+1);
neibours(2,1)=SP(i,j-1);
neibours(2,3)=SP(i,j+1);
neibours(3,1)=SP(i+1,j-1);
neibours(3,2)=SP(i+1,j);
neibours(3,3)=SP(i+1,j+1);
neibours(2,2)=SP(i,j);
maxi= max(neibours(:));
mini= min(neibours(:));
newvalue= maxi-mini;
SP(i,j)=newvalue;
end
end
OutputFileName = ['./output_images/' stemName '_filtered.tif'];
imwrite(SP,OutputFileName);
Шум применяется к изображению I, а затем сохраняется в SP. Новый массив создается neibours, в котором добавляются все соседи, включая текущий пиксель. Затем разность между max и min вычисляется и сохраняется в текущем пикселе. Проблема в том, что когда я сравниваю изображение, сгенерированное с помощью этого кода, и тот, который генерируется из встроенных функций rangefilt(), отличается.
Закрытие из-за простой опечатки. Вы переписывали входные значения вашей матрицы с значениями ваших выходных значений. – rayryeng