私は白黒の画像I0
(512 x 512)を持っています。最初のk
ピクセルを取り除き、結果の画像のヒストグラムを計算する必要があります。ヒストグラムがあまりにも異なっている
私に説明してください:最初のk
ピクセルを考慮せずに画像I0
のヒストグラムを構築する必要があります。
これは私のコードです:
k = 8;
% compute the histogram of the entire image I0
[vecComp, histComp] = histKtoEnd(I0, 0, k);
% compute the histogram of the image I0 without the first k pixel
[vecWithoutKPixel, histWithoutKPixel] = histKtoEnd(I0, k, k);
:二つのヒストグラムを表示するには
function [vecWithoutKPixel, hist] = histKtoEnd(image, k, colorDepth)
% image to row vector
imageVec = reshape(image.', [], 1);
l = length(imageVec);
% I "delete" the first k pixel
vecWithoutKPixel = imageVec((k+1) : l-1);
vecWithoutKPixel(end+1) = imageVec(l);
% inizialization
hist = zeros(1, 2^colorDepth);
% create the vector of occurrences
for i = 0 : (2^colorDepth - 1)
grayI = (vecWithoutKPixel == i);
hist(1, i+1) = sum(grayI(:));
end
end
を行います
subplot(1, 2, 1);
bar(0:2^k-1, histComp, 'r');
title('Histogram of the entire image');
axis([minColor, maxColor, 0, numberOfPixels]);
subplot(1, 2, 2);
bar(0:2^k-1, histWithoutKPixel, 'r');
title('Histogram of the image without the first k pixels');
axis([minColor, maxColor, 0, numberOfPixels]);
ご覧のとおり、ヒストグラムは非常に異なりますが、違いはわずか8ピクセルであるため、少ししか違いがありません。
どこが間違っていますか?
もwarkspaceに新しく作成された変数は、これらの寸法を有する:
vecComp -> 262144 x 1 uint8
histComp -> 1 x 256 double
vecWithoutKPixel -> 65528 x 1 uint8
histWithoutKPixel -> 1 x 256 double
これは非常に奇妙です。私は持っている必要があります:
vecComp -> 262144 x 1
vecWithoutKPixel -> 262136 x 1
誰かが私を助けることができますか? は、私はDICOM画像およびコマンドinfo = dicominfo(filename)
で働いている
は、だから私は問題が画像であるとは思わない
size = info.FileSize; % 262582;
colorType = info.ColorType; % grayscale
を取得していただきありがとうございます。
私はラインvecWithoutKPixel(end+1) = imageVec(l);
にbrakpointを置けば、私はimageVec
は262144×1 UINT8され、その取得:
function [vecWithoutKPixel, hist] = histKtoEnd(image, k, colorDepth)
% image to row vector
imageVec = reshape(image.', [], 1);
l = length(imageVec);
size(imageVec) % 262144 x 1
% I "delete" the first k pixel
vecWithoutKPixel = imageVec((k+1) : l-1);
vecWithoutKPixel(end+1) = imageVec(l);
% inizialization
hist = zeros(1, 2^colorDepth);
% create the vector of occurrences
for i = 0 : (2^colorDepth - 1)
grayI = (vecWithoutKPixel == i);
hist(1, i+1) = sum(grayI(:));
end
end
私はvecWithoutKPixel = imageVec((k+1) : l);
でコマンドvecWithoutKPixel = imageVec((k+1) : l-1); vecWithoutKPixel(end+1) = imageVec(l);
を変更した場合、私はvecWithoutKPixel = []
ことを取得します。
'vecWithoutKPixel = imageVec((k + 1):l-1);'行にブレークポイントを設定し、 'size(imageVec)'を使って 'imageVec'の寸法を確認できますか?また、1) '(k + 1):(l-1)'が違うかもしれませんし、2)なぜ最後の要素を "削除"して戻したのですか? – Yvon
そして、 'imageVec = image(:);'を試してください – Yvon
実際の問題は画像データにあります。私はあなたがB/W画像を扱っていると信じていますが、MatlabではRGBA画像として保存されています。これは元の画像のサイズで見ることができます。あなたはまずそれを真のB/Wに変換しなければなりません。 – Yvon