【问题标题】:Matlab image block processingMatlab图像块处理
【发布时间】:2014-12-06 01:12:23
【问题描述】:
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 个块,对每个块应用标准差,然后使其成为二进制。

所有这些都是从图像中获取文本的一部分。到目前为止,我想弄清楚感兴趣的区域。

为什么第三张图还是原来的样子?

原图:

【问题讨论】:

  • 请单独发原图
  • @Benoit_11 image
  • @Rentoni 不,请更新您的问题

标签: matlab image-processing


【解决方案1】:

缩放。

您加载的图像可能包含uint8 值(0 到 255)。然后通过blockproc 对其执行std2。此输出的类型为double,但尚未缩放,因此其中的值与原始值的数量级相似。

然后您无需任何输入即可调用im2bw。这会将阈值级别设置为 0.5,如果您假设 double 类型的图像在 0 和 1 之间缩放(许多 MATLAB 图像处理做出的标准假设),这是一个合理的设置。但是,在您的情况下,显然大多数值都高于 0.5,因此绝大多数显示为白色。

两种选择:

1) 缩放图像(例如,在将图像传递给 blockproc 时执行 im2double(I)
2)给im2bw一个阈值。您可以使用graythresh 自动计算一个,例如BW = im2bw(J,graythresh(J));

请注意,此缩放问题将对其他图像处理过程和保存图像产生影响。双倍类型的图像,或者您要对其进行处理使其成为双倍?确保它在 0 和 1 之间缩放,或者在处理之前im2double 它。这样您就不必再回到这里询问有关您保存的图像显示为空白时的问题。

【讨论】:

    猜你喜欢
    • 2012-06-08
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多