Why an error occurs in cmunique with images with colour palettes larger than 256*256 colours?
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Maria Jose Luque
am 10 Feb. 2017
Kommentiert: Maria Jose Luque
am 15 Feb. 2017
Found an error in cmunique when working with images with large colourmaps.
>> im=rand(256*257,1,3);
>> [Y,newmap] = cmunique(im);
Error using -
Matrix dimensions must agree.
Error in cmunique (line 107)
loc = (1:nmap) - cumsum(d);
The error appears to be caused by line 105 in cmunique
n = histcounts(c,'BinMethod','integers','BinLimits',[1 nmap]);
If nmap<=256*256, all works well, but if nmap>=256*257, the length of n suddenly drops by an order of magnitude (and the number of counts for each color changes from 1 to 10!)
Any reason why this should be so?
2 Kommentare
Walter Roberson
am 15 Feb. 2017
The code should not be relying on those parameters for histcounts :(
Akzeptierte Antwort
Walter Roberson
am 15 Feb. 2017
Bearbeitet: Walter Roberson
am 15 Feb. 2017
I suggest
[newmap, ~, uidx] = unique( reshape(im, [], 3), 'rows');
Y = reshape(uidx, size(im, 1), size(im, 2) );
mlen = length(newmap);
if mlen <= 256
Y = uint8(Y - 1);
elseif mlen <= 65536
Y = uint16(Y - 1);
%else leave it as-is
end
Weitere Antworten (1)
Darshan Ramakant Bhat
am 15 Feb. 2017
It seems MATLAB has an issue with this function. I recommend you to use ' rgb2ind ' function instead. Document link for the function is given below:
I hope this will serve your purpose.
Regards
Darshan Bhat
2 Kommentare
Walter Roberson
am 15 Feb. 2017
rgb2ind is not suitable for this situation. Notice that
"n must be less than or equal to 65,536"
which is 256*256.
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!