仅限Matlab代码如果像素值超过给定的阈值,则计算像素数而不是它们的总和

时间:2016-06-26 11:56:49

标签: image matlab

K = imread('test.jpg');                               // read image 
countif=0;countelse=0;                                // declare variables
addif=0;addelse=0;
counttotal=0; temp=0;        
[M N] = size(K);                                      // calculate the size of the image
for x=1:M                                             // X-Axis
    for y=1:N                                         // Y-Axis

                temp=K(x,y);                          // Pixel Value at location(x,y)

                if (temp<50)                          // If value of pixel is below threshold value 50 
                    addif =  addif + temp;            // Add to get sum of all these pixels
                    countif = countif + 1;            // Counter to get total number of such pixels 


                else                                  // If pixel value is above threshold limit i.e 50
                 countelse = countelse + 1;           // Add to get sum of all these pixels
                 addelse=   addelse + temp;           // Counter to get total number of such pixels 
                end

        counttotal=counttotal+1;                     // Total rotation counter
    end
end

在上面给出的代码中,名为&#39; countif&#39;和&#39; countelse&#39;工作正常,但变量值和addif&#39;和&#39; addelse&#39;不是应该的。

2 个答案:

答案 0 :(得分:0)

您可以为此

使用逻辑索引
checking whether user supplied BLASLIB=[text above]  does not work

答案 1 :(得分:0)

<强>解决方案: -

将此代替:K = imread('test.jpg');K = double(imread('test.jpg'))

或者,如果您想保留unit8 K类和temp,而不是上述修复,请执行以下操作:替换此addif = addif + temp; 这个:addif = addif + double(temp);  这个addelse= addelse + temp;与此addelse= addelse + double(temp);

<强>解释: -

temp的等级为uint8,因为K的等级为uint8因此,您得到的addifaddelse的等级也会变为{ {1}}无法存储超过unit8的值。通过将255转换为K,您使用它的所有下一个变量都会像我在第一个提出的解决方案中那样变为double。或者,如果您希望保持doubleK的类相同,则可以使用第二个建议的解决方案。

您可以在命令窗口中使用temp来检查变量类。