Why an error occurs in cmunique with images with colour palettes larger than 256*256 colours?

1 Ansicht (letzte 30 Tage)
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
Maria Jose Luque
Maria Jose Luque am 15 Feb. 2017
For some reason, histcounts limits the maximum number of bins Line 387 function mb = getmaxnumbins mb = 65536; %2^16 end

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Walter Roberson
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
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

Kategorien

Mehr zu Images finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by