Image 使用像素值或int时的结果差异

Image 使用像素值或int时的结果差异,image,matlab,image-processing,Image,Matlab,Image Processing,在使用Matlab进行图像处理时,我发现了一件非常奇怪的事情,即通过模糊逻辑精确地改进img。我的模糊函数是正确的,我对随机值进行了测试,它们基本上是简单的线性函数 function f = Udark(z) if z < 50 f = 1; elseif z > 125 f = 0; elseif (z >= 50) && (z <= 125) f = -z/75 + 125/75; end end 其中z是灰度中像素的值。现

在使用Matlab进行图像处理时,我发现了一件非常奇怪的事情,即通过模糊逻辑精确地改进img。我的模糊函数是正确的,我对随机值进行了测试,它们基本上是简单的线性函数

function f = Udark(z)
if z < 50
    f = 1;
elseif z > 125
    f = 0;
elseif (z >= 50) && (z <= 125)
    f = -z/75 + 125/75;
end

end
其中z是灰度中像素的值。现在发生了一件非常奇怪的事情。 f=-z/75+125/75;,其中a是一个图像。然而,如果将其用作输入,则会产生完全不同的结果。也就是说,如果我使用一个变量p=99,函数的输出应该是0.3467,如果我使用Ai,j,结果是f=2。由于这显然是不可能的,我不知道问题出在哪里。我想可能变量的类型有问题,但如果我把它改成uint8,它会保持不变。。。如果您知道发生了什么,请告诉我:

1.更改行: 编辑第三个条件后,生成/变换图像的像素值不为2。不确定您是否打算使用小数。如果需要小数,则使用im2double函数转换图像并将其放大255倍就可以满足您的需要。四舍五入详情见标题3

2.图像读取和测试: 如果z=50.1

-50.1/75+125/75=74.9/75≈ 0.9987→ 四轮到一轮

使用MATLAB版本:R2019b

1。更改行: 编辑第三个条件后,生成/变换图像的像素值不为2。不确定您是否打算使用小数。如果需要小数,则使用im2double函数转换图像并将其放大255倍就可以满足您的需要。四舍五入详情见标题3

2.图像读取和测试: 如果z=50.1

-50.1/75+125/75=74.9/75≈ 0.9987→ 四轮到一轮


使用MATLAB版本:R2019b

在迭代图像时如何调用函数?似乎您处理图像矩阵的方式可能有问题,而不是函数本身的代码有问题。在迭代图像时如何调用函数?似乎您处理图像矩阵的方式可能有问题,而不是此函数中的代码本身。感谢im2doubleimg或doublepixel_值计算:感谢im2doubleimg或doublepixel_值计算:
f = (125/75) - (z/75);
%Reading in the image and applying the function%
Image = imread("RGB_Image.png");
Greyscale_Image = rgb2gray(Image);

[Image_Height,Image_Width] = size(Greyscale_Image);
Transformed_Image = zeros(Image_Height,Image_Width);

for Row = 1: +1: Image_Height
   for Column = 1: +1: Image_Width 
    
    Pixel_Value = Greyscale_Image(Row,Column);
    [Transformed_Pixel_Value] = Udark(Pixel_Value);
    Transformed_Image(Row,Column) = Transformed_Pixel_Value;
   
   end 
end

subplot(1,2,1); imshow(Greyscale_Image);
subplot(1,2,2); imshow(Transformed_Image);

%Checking that no transformed pixels falls in this impossible range%
Check = (Transformed_Image > (125/75)) & (Transformed_Image ~= 1);
Check_Flag = any(Check,'all');


%Function to transform pixel values%
function f = Udark(z)
if z < 50
    f = 1;
elseif z > 125
    f = 0;
elseif (z >= 50) && (z <= 125)
    f = (125/75) - (z/75);
end

end
f = -z/75 + 125/75;