How can I apply a non-built in function to an image for quantification?
2 次查看(过去 30 天)
显示 更早的评论
THIS ERROR APPEARS : Assignment has more non-singleton rhs dimensions than non-singleton subscripts Error in TP2_script (line 13) I(i,j)=quant;
0 个评论
回答(2 个)
Image Analyst
2022-3-23
Try this. You might want to reexamine your formula though.
% I=imread('irm2.jpg');
grayImage=imread('cameraman.tif');
[rows, columns, numberOfColorChannels] = size(grayImage);
subplot(1, 2, 1);
imshow(grayImage);
title('Input Image')
impixelinfo
axis('on', 'image')
if numberOfColorChannels == 3
errordlg('Error: program only works for gray scale images, not color images');
return
end
N=16 %niveau de quantification change to 4,8,16...128
fmin=min(min(grayImage)) % for 2D matrix of data (vector utilisation)
fmax=max(max(grayImage))
q=(fmax-fmin)/N % pas de quantification
% Convert to floating point
grayImage = double(grayImage);
for row = 1 : rows
for col = 1 : columns
quant = Quant_gray(grayImage, N, q, fmax, fmin, row, col);
grayImage(row, col) = quant;
end
end
% Show resulting output image.
subplot(1, 2, 2);
imshow(grayImage, []);
title('Output Image')
impixelinfo
%===================================================================================================================
function [quant] = Quant_gray(I, N, q, fmax, fmin, row, col)
if I(row, col) ~= fmax %I(i,j) not equal to fmax
quant= [I(row, col) * (fmax-fmin)/q] / N - 1;
quant= floor(quant);
else
quant = N-1; % I(i,j)=fmax
end
end
3 个评论
Image Analyst
2022-3-24
I suspect this
quant= [I(row, col) * (fmax-fmin)/q] / N - 1;
quant= floor(quant);
is always giving 0. Not sure what you're doing but you might try discretize().
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!