matlabにいくつかの問題がありますがわかりません。次のコードは画像のコレクションを分析し、一貫性のある画像を返します(いつもそうしました)。Matlabでind2subを使用した後に説明できない結果
しかし、if-conditionは2番目のfor-loop(最適化のため)に置いているので、インターレースされたイメージを返します。
私はなぜ、理解していない、私のコンピュータを窓から投げる準備ができています。私はそれがind2sub
と関係があると思っていますが、私はすべてがうまくいっているのを見ることができます! 誰もがこれをやっている理由を知っていますか?誰もが(それをより良く理解するために)より多くを必要とする場合
function imageMedoid(imageList, resizeFolder, outputFolder, x, y)
% local variables
medoidImage = zeros([1, y*x, 3]);
alphaImage = zeros([y x]);
medoidContainer = zeros([y*x, length(imageList), 3]);
% loop through all images in the resizeFolder
for i=1:length(imageList)
% get filename and load image and alpha channel
fname = imageList(i).name;
[container, ~, alpha] = imread([resizeFolder fname]);
% convert alpha channel to zeros and ones, add to alphaImage
alphaImage = alphaImage + (double(alpha)/255);
% add (r,g,b) values to medoidContainer and reshape to single line
medoidContainer(:, i, :) = reshape(im2double(container), [y*x 3]);
end
% loop through every pixel
for i=1:(y * x)
% convert i to coordinates for alphaImage
[xCoord, yCoord] = ind2sub([x y],i);
if alphaImage(yCoord, xCoord) == 0
% write default value to medoidImage if alpha is zero
medoidImage(1, i, 1:3) = 0;
else
% calculate distances between all values for current pixel
distances = pdist(squeeze(medoidContainer(i,:,1:3)));
% convert found distances to matrix of distances
distanceMatrix = squareform(distances);
% find index of image with the medoid value
[~, j] = min(mean(distanceMatrix,2));
% write found medoid value to medoidImage
medoidImage(1, i, 1:3) = medoidContainer(i, j, 1:3);
end
end
% replace values larger than one (in alpha channel) by one
alphaImage(alphaImage > 1) = 1;
% reshape image to original proportions
medoidImage = reshape(medoidImage, y, x, 3);
% save medoid image
imwrite(medoidImage, [outputFolder 'medoid_modified.png'], 'Alpha', alphaImage);
end
私は、(簡略化のために)全体のコード、ちょうどこの機能が含まれていなかった、私が知っていると私はそれが含まれるだろうしてください。
"if-loop"のようなものはありません。ループがない場合。 –
@MattBurland、そうです。修正しました。何か案は? –
申し訳ありません。私はMatLabに慣れ親しんでいます。恐らくif条件にあなたのロジックに何らかの問題があります。私はalphaImage(yCoord、xCoord)を持っていることに気付きました。あなたはそれらが正しい方法であると確信していますか? –