Info
この質問は閉じられています。 編集または回答するには再度開いてください。
Histogram equalisation errors, help with my code
2 ビュー (過去 30 日間)
古いコメントを表示
Iam working on implenting a histogram equalisation of an image without using inbuilt functions specifcally imhist and histeq, I have, for the most part understood what do during a histogram equalisation i.e. find the histogram, normalize the histogram values, find the cummulative probabillity and then map the old image values to the new ones.
Can someone look at this code and help me fix what is wrong? Iam allowed to use cumsum and Hist or Histcounts. I have a test function that checks my code for different values that I've added for reference. Thank you. This is my code:
%input image data is assumed to be in range 0..1
I = imread(img);
image =I;
[m,n] = size(image);
L = 256;
H = histcounts(image(:),(0:256));
H = H.';
[counts] = H;
x = 0:255;
myCDF = cumsum(counts)/(m*n);
equalizedI = (L-1)*myCDF(double(image)+1);
equalizedI = uint8(equalizedI);
histMyOut = histcounts(equalizedI,256);
eq_img = histMyOut
return
My error:
Array indices must be positive integers or logical values.
Error in histeq_contrast (line 22)
equalizedI = (L-1)*myCDF(double(image)+1);
Error in histeq_test (line 16)
I1eq = histeq_contrast(I1);
For reference, my test function is:
I1 = imread('vintage_postcard.tif');
%I1 = imread('pout.tif');
%I1 = imread('office_5.jpg'); I1=I1(:,:,2);
%I1 = imread('office_1.jpg'); I1=I1(:,:,2);
%I1 = imread('low_light.tif');
I1=im2double(I1);
% damage contrast
I1=0.8*I1;
I1eq = histeq_contrast(I1);
figure
subplot(1,2,1);
imagesc(I1); caxis([0 1]); title('Test Image 1'); axis equal tight
subplot(1,2,2);
imagesc(I1eq); caxis([0 1]); title('Histeq Result'); axis equal tight
colormap(gray);
fprintf(1,'Min/max of input image 1: %3.3f %3.3f\n', min(I1(:)),max(I1(:)) );
fprintf(1,'Min/max of output image 1: %3.3f %3.3f\n', min(I1eq(:)),max(I1eq(:)) );
% damage contrast
I2 = I1*0.25 + 0.25;
I2eq = histeq_contrast(I2);
figure
subplot(1,2,1);
imagesc(I2); caxis([0 1]); title('Test Image 2'); axis equal tight
subplot(1,2,2);
imagesc(I2eq); caxis([0 1]); title('Histeq Result'); axis equal tight
colormap(gray);
fprintf(1,'Min/max of input image 2: %3.3f %3.3f\n', min(I2(:)),max(I2(:)) );
fprintf(1,'Min/max of output image 2: %3.3f %3.3f\n', min(I2eq(:)),max(I2eq(:)) );
0 件のコメント
回答 (0 件)
この質問は閉じられています。
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!