How to apply a different b/w threshold to each row of the image?

5 ビュー (過去 30 日間)
Nut 2016 年 6 月 13 日
コメント済み: Image Analyst 2020 年 1 月 22 日
I would convert an image from grayscale to black-and-white using the im2bw function, and I need to apply a different threshold to each row of the image. Which is the most efficient way to do this? Is there a way to avoid the "for" cycle?
Thank you very much.
  2 件のコメント
Image Analyst
Image Analyst 2020 年 1 月 22 日
Roman, it would be something like
[rows, columns, numberOfColorChannels] = size(theImage);
binaryImage = false(rows, columns);
for row = 1 : rows
% Get the threshold for this row - however you do it (I don't know).
thisThreshold = whatever;
% Now threshold/binarize the image for this row only.
binaryImage(row, :) = theImage(row, :) > thisThreshold;



Andrew Bliss
Andrew Bliss 2016 年 6 月 13 日
Depending on the input type of your image, you may be able to just do a simple thresholding operation (as below), otherwise you'll have to delve a little deeper into image processing.
thresh=[50*ones(325,1);150*ones(325,1)]; %here you set the threshold for each row
  2 件のコメント
Nut 2016 年 6 月 14 日
You're right. The execution time with your solution is about 1.6 seconds, instead using im2bw and the for loop it is about 5.1 seconds. Very good idea, thank you again.


その他の回答 (1 件)

Image Analyst
Image Analyst 2016 年 6 月 14 日
編集済み: Image Analyst 2016 年 6 月 14 日
No, you'll have to use a for loop. It's not a problem though. It will be very fast. No need to worry about for loops that are only a few thousand iterations.
Why do you need a different threshold for each row anyway?
You might be able to use a different function. There are new binarization functions. See Steve's blog:
  7 件のコメント
Nut 2016 年 6 月 16 日
I'll try it, thank you!


Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by