白/黒のイメージがあります。この画像の白いピクセルにガウス フィルターを適用します。ただし、さまざまなガウス帯域幅パラメーターをさまざまなピクセルに与えたいので、ピクセルごとに適用したいと考えています。
たとえば、画像には白のピクセルが 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');