我有一個白色/黑色的圖像。我想對此圖像上的白色像素應用高斯濾鏡。但是,我想逐像素地應用它,因爲我想給不同的像素提供不同的高斯帶寬參數。如何應用高斯濾波器在matlab中的圖像的單個像素?
例如,圖像上只有2個像素是白色的,其他的是黑色的。我想對這2個像素應用不同的高斯濾鏡。假設X [2]和Y [2]是2個像素的座標。
Gaussian bandwidth for X[0] and Y[0] is [10, 10], standard deviation is 1.
Gaussian bandwidth for X[1] and Y[1] is [20, 20], standard deviation is 3.
我知道roifilt2會在ROI上工作,但它似乎只適用於圖像區域而不是單個像素。我已經通過我的理解編碼後,我檢查ROI處理,但下面的代碼給我錯誤:
Error using imwrite (line 422)
Image data can not be empty.
Error in guassianFilter (line 73)
imwrite(out,[outdir,imname,'.png'],'png');
看來濾波輸出圖像是空的。但我是matlab新手,我不知道爲什麼會發生這種情況,以及如何解決這個問題。 :(
是否有任何MATLAB函數,我可以直接打電話到做的工作
代碼:
while ischar(tline)
line = regexp(tline,' ','split');
if(strcmp(line{1},'touch') == 1)
c = floor(str2double(line{1,3})); % same as X[0] as I mentioned above
r = floor(str2double(line{1,4})); % same as Y[0] as I mentioned above
BW = roipoly(im,c,r);
G = fspecial('gaussian',[10 10],1);
out = roifilt2(G,im,BW);
end
if(strcmp(line{1},'dT') == 1)
c = floor(str2double(line{1,3})); % same as X[1] as I mentioned above
r = floor(str2double(line{1,4})); % same as X[1] as I mentioned above
BW = roipoly(im,c,r);
G = fspecial('gaussian',[20 20], 3);
out = roifilt2(G,im,BW);
end
tline = fgets(fid);
end
fclose(fid);
imname=strtok(imList(cnt).name,'.');
imwrite(out,[outdir,imname,'.png'],'png');
非常感謝你支持!我非常感謝您的時間和精力,使其能夠理解清楚。 – Jasmine