clear
I = imread('punk.jpg');
figure; imshow(I);
B=blockproc(I, [4 4], @(x) std2(x.data(:)));
figure;
imshow(B,[]);
J = imresize(B, 4);
figure;
imshow(J,[]);
BW = im2bw(J);
figure;
imshow(BW);
我想要的是获取图像,在nxn块中打破它,对每个块应用标准偏差然后使其成为二进制。
所有这些都是从图像中获取文本的一部分。到目前为止,我想弄清楚感兴趣的区域。
为什么第三张图像不是这样?
原始图片:
答案 0 :(得分:3)
缩放。
加载可能包含uint8
值(0到255)的图像。然后,您可以通过std2
对其执行blockproc
。此输出的类型为double
,但尚未缩放,因此其中的值将与原始值的数量级相同。
然后在没有任何输入的情况下调用im2bw
。这会将阈值级别设置为0.5,如果您假设double类型的图像在0和1之间缩放(许多MATLAB图像处理的标准假设),则这是一个合理的设置。但是,在您的情况下,显然大多数值都高于0.5,因此绝大多数都显示为白色。
两个选项:
1)缩放图片(例如,将im2double(I)
传递给blockproc
时,请执行im2bw
2)给graythresh
一个阈值。您可以使用BW = im2bw(J,graythresh(J));
自动计算一个,例如im2double
请注意,此缩放问题会影响其他图像处理过程并保存图像。 double类型的图像,或者你要对它进行处理,使其加倍?确保在处理之前将其缩放在0和1之间,或{{1}}。这样可以避免您回到此处询问有关您保存的图像显示为空白的问题。