2016-11-18 4 views
0

Мне дается назначение для применения фильтра диапазона. Вот мой код для этого:Внедрение 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(), отличается.

+0

Закрытие из-за простой опечатки. Вы переписывали входные значения вашей матрицы с значениями ваших выходных значений. – rayryeng

ответ

0

Я обновлял ту же матрицу SP. Когда я создал новую матрицу S и сохранил значения в ней, она произвела те же результаты, что и встроенные в нее.