0

こんにちは、Matlab の初心者です。histeq を使用せずにヒストグラムの平衡化を試みています...

しかし、何らかの理由で、常に次のエラーが発生します:??? インデックスがマトリックスの次元を超えています。

ここに私のコードがあります.................................................. ....ご協力いただきありがとうございます

  clc

  I = imread ('Machine-Edge.PNG');
  I2 = rgb2gray(I);
  colormap gray;

  y = imhist(I2);


  %using hist eq. built in fn
  I3= histeq(I2);
  z= imhist(I3);

  %my equalization
  r = size(I2,1);
  c = size(I2,2);
  A= zeros(1,256);

  %counting number of pixels of the image and putting the count in Array A
  for j=1:r
    for x=1:c
        v=I2(j,x);
        A(v+1)=A(v+1)+1;
    end
  end

  %pi=n/size
    for y=1;256
      pi(y)= ((A(y))/(r*c));
    end

   %calculate CI (cumulated pi )
    ci(1)=pi(1);
    for yy=2;256
         ci(yy) = ci(yy-1)+ pi(yy);
    end

    %calculate T=range *Ci
      for b=1;256
        T(b)=ci(b)*255;
       end

    %equilization..replacing each pixel with T value
     for j=1:r
         for x=1:c
             I4(j,x) =T(I2(j,x));

          end
     end




    vv= imhist(I4);



   figure
   subplot(3,2,1)
    imagesc(I2)
   subplot(3,2,2)
   plot(y)

  subplot(3,2,3)
  imagesc(I3)
   subplot(3,2,4)
   plot(z)

   subplot(3,2,5)
   imagesc(I4)
   subplot(3,2,6)
    plot(vv)
4

1 に答える 1

0

これは古い投稿ですが、OP が使用されています。: の代わりに for ループで使用します (つまり、for y=1;256 は y=1:​​256 を読み取る必要があります)。修正されたコードは次のとおりです。

 clc

 I = imread ('Machine-Edge.PNG');
 I2 = rgb2gray(I);
 colormap gray;

 y = imhist(I2);


 %using hist eq. built in fn
 I3= histeq(I2);
 z= imhist(I3);

 %my equalization
 r = size(I2,1);
 c = size(I2,2);
 A= zeros(1,256);

 %counting number of pixels of the image and putting the count in Array A
 for j=1:r
   for x=1:c
       v=I2(j,x);
       A(v+1)=A(v+1)+1;
   end
 end

 %pi=n/size
   for y=1:256
     pi(y)= ((A(y))/(r*c));
   end

  %calculate CI (cumulated pi )
   ci(1)=pi(1);
   for yy=2:256
        ci(yy) = ci(yy-1)+ pi(yy);
   end

   %calculate T=range *Ci
     for b=1:256
       T(b)=ci(b)*255;
      end

   %equilization..replacing each pixel with T value
    for j=1:r
        for x=1:c
            I4(j,x) =T(I2(j,x));

         end
    end




   vv= imhist(I4);



  figure
  subplot(3,2,1)
   imagesc(I2)
  subplot(3,2,2)
  plot(y)

 subplot(3,2,3)
 imagesc(I3)
  subplot(3,2,4)
  plot(z)

  subplot(3,2,5)
  imagesc(I4)
  subplot(3,2,6)
   plot(vv)
于 2014-06-18T03:28:34.913 に答える