我有一个白色/黑色的图像。我想将高斯滤波器应用于此图像上的白色像素。但是,我想逐个像素地应用它,因为我想为不同的像素提供不同的高斯带宽参数。
例如,图像上只有 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');