我有一张图片。我想使用MATLAB编程获得并标记该图像中具有最小强度的位置。我还希望获得最小强度值
答案 0 :(得分:3)
要正确识别图片中 的最低强度,请将调用与min
和find
结合使用。因此,如果A
是您的图片,请执行以下操作:
min_val = min(A(:));
[row,col] = find(A == min_val), 1);
min_val
将包含图片中的最小强度。重要的是通过A
将矩阵A(:)
展开到单个列向量。这样,您可以确保min
同时对所有像素值进行操作。在上面的代码中,row
和col
将包含找到最小强度的位置和列位置。这种复杂性是,如果您有多个共享相同最小强度的像素,find
将返回共享相同强度的所有位置。如果您只想要其中一个,请将1
添加为find
的第二个参数。
如果你想在图像中标记最小强度的位置,那么只需通过索引来完成:
A(row,col) = 255;
这会将最小强度所在的位置设置为白色或255。
C.Colden的代码也是一个很好的尝试,但如果输入不是矢量(即具有两个以上维度的矩阵或数组),它将无效,因为min
将运行沿着第一个非单一维度。这就是您需要将图像展开为单个向量的原因,如上面的代码所示。
如果我们在min
中输入矩阵,在您的情况下,min
会找到每列的最小值。如果需要,您必须拨打min
两次以确定行位置,方法是在第一个min
调用找到的列上应用min
,但我发现上述代码更具可读性。
但是,出于学术目的,如果您只想使用min
,这就是您要做的事情:
[min_col, rows] = min(A); %// Find the minimum among all columns as well as which row for each column gave the minimum
[min_val, col] = min(min_col); %// Now, for each of the minimum values, figure out which column gave us the global minimum as well as the minimum itself
row = rows(col); %// Now find the row location of this global minimum
正如您所看到的,我宁愿坚持使用find
和min
进行首次尝试....它只是更具可读性。
答案 1 :(得分:0)
您可以使用imread
(http://ch.mathworks.com/help/matlab/ref/imread.html)加载图片。之后,您可以将图像视为矩阵。因此,如果“A”是您的图片,则可以使用max
(http://ch.mathworks.com/help/matlab/ref/max.html)或min
使用Min_Value = min(A(:))
查找值。然后,您可以使用[row,column] = find(A == Min_Value)
示例:
A = [3,2,1;4,5,20;7,8,9];
Min_Value = min(A(:));
[row,column]=find(A == Min_Value);