0

左右の隣接ピクセルだけですべてのピクセルの平均を計算しようとしていますが、処理の最後に白い画像しか表示されないため、エラーが発生した場所が見つかりません。これが私のコードです

imageIn = imread('Prueba.jpg');
imageIn = rgb2gray(imageIn);
imageOut = zeros(size(imageIn));

ny = size(imageIn, 1);
nx = size(imageIn, 2);

imshow(imageIn);

u = [];
v = [];

tic

for i = 1:ny
    u = imageIn(i,:);
    v = zeros(1, ny);
    for k = 2:ny-1
        v(k) = (uint32(u(k-1))+uint32(u(k))+uint32(u(k+1)))/3;
    end
    %Special cases first and last pixel
    v(1) = (uint32(u(2))+uint32(u(1))+uint32(u(2)))/3;
    v(ny) = (uint32(u(ny-1))+uint32(u(ny))+uint32(u(ny-1)))/3;
    imageOut(i,:) = v;
end

toc
imshow(imageOut);

何か案は?

4

3 に答える 3

4

コードの最後の行をに変更するimagesc(imageOut)と、画像が実際には白ではないことがわかります。

あなたのコードは大丈夫です。この関数を使用して画像が白く表示される理由はimshow()、ローカル平均を適用した後、ピクセル強度の範囲がかなり狭くなり、によって使用されるデフォルトのスケーリングimshow()では画像のコントラストを引き出すには不十分であるためです。

b / tの違いについて読んimshow()imagesc()ください。そうすれば、混乱がわかります。

于 2012-11-10T19:57:04.907 に答える
0

最初の行列のクローンである2番目の行列を作成し、それをシフトしてから、2つの行列を平均化してみませんか?

imIn = imread('Prueba.jpg');

nx = size(d,1);
ny = size(d,2);

% Create temporary matrices padded with nan
tmp1 = [nan(ny,2), d];
tmp2 = [d, nan(ny,2)];

imOut = tmp1;
imOut(:,:,2) = tmp2;

% use nanmean so the mean is just the value of the 1 column
imOut = nanmean(imOut,3);

out = imOut(2:end-1,:);
于 2012-11-10T19:23:41.123 に答える
0

これを使ってみてください

imageIn = imread('Prueba.jpg');
imageIn = rgb2gray(imageIn);
imageOut = zeros(size(imageIn));

ny = size(imageIn, 1);
nx = size(imageIn, 2);

imshow(imageIn);

u = [];
v = [];

tic

for i = 1:ny
u = imageIn(i,:);
v = zeros(1, ny);
for k = 2:ny-1
v(k) = (uint32(u(k-1))+uint32(u(k))+uint32(u(k+1)))/3;
end
%Special cases first and last pixel
v(1) = (uint32(u(2))+uint32(u(1))+uint32(u(2)))/3;
v(ny) = (uint32(u(ny-1))+uint32(u(ny))+uint32(u(ny-1)))/3;
imageOut(i,:) = v;
end

toc

imshow(imageOut);

于 2012-11-10T19:37:16.110 に答える