如何反转灰度图像并将其转换为二进制图像?

问题描述:

我想创建这样一个形象: alt text 从这样的图像: alt text http://internationalpropertiesregistry.com/Server/showFile.php?file=%2FUpload%2Funtitled.jpgb523c7595dd8e7514e1c6d51a83161a3.jpeg如何反转灰度图像并将其转换为二进制图像?

UPDATE

这里是真实的255-img生成的内容,但结果不完全一致: alt text http://internationalpropertiesregistry.com/Server/showFile.php?file=%2FUpload%2Funtitled.jpg61f9edbeb4f0285c2a1772cced3ce393.jpeg

+0

我不知道matlab,但它肯定会更容易做到,如果你可以在第一张图像中倒转白色方块而不是只留下相同的颜色。也许你需要做的就是在绘制之前调整绘图设置? – tvanfosson 2010-06-05 15:11:23

这取决于你的输入矩阵是什么类型。

如果它是一个逻辑矩阵可以简单地使用

invImg = ~img; 

如果具有在0到n的范围内的标量值使用

invImg = n - img; 

编辑:

如果你想黑白图像尝试以下(也许你需要玩水平 paramte r):

+0

我试过'255-img',但网格不见了,为什么? – user198729 2010-06-05 15:27:21

+1

网格仍然存在。他们非常虚弱。 – Jonas 2010-06-05 19:23:03

+1

这是因为网格线在白色背景图像中不是黑色,而是灰色。 – Donnie 2010-06-05 20:20:04

它看起来像第三个情节是与上面的第二个相反。

有一点要考虑的是你使用的是什么抽奖图像image()imagesc()imshow() imagesc()不会自动缩放和imshow()将使用彩色地图。

要考虑的另一件事是输入图像本身。它的范围从0到255,0 - 1.0还是RGB?取决于它是什么,相反会有所不同。

您的图像不是二元黑色&白色。那里也有灰色。

从您的编辑中可以看出,您看起来像素上的任何像素以及要关闭的任何关闭像素(即将其转换为直接二进制黑白图像),这应该按照您的要求进行:

newImg = zeros(size(img)); 
newImg(img > 0) = 0; % <-- This line is not really needed 
newImg(img = 0) = 1; 

请注意,第二行不是严格必要的,因为无论如何新图像被初始化为0,它只是为了显示究竟是怎么回事。

我在处理上面张贴的第二张图像时遇到了一些麻烦。由于它采用JPEG格式,因此图像压缩似乎使线条和文字模糊不清,并且使得以您想要的方式对其进行阈值处理变得复杂。

我,而不是回到你贴在the previous related question的索引颜色的GIF图像,将其转换为灰度(使用功能IND2GRAYImage Processing Toolbox),然后转换是一个颠倒黑白图像相匹配的格式您上面张贴的第一张图片。下面是我使用的代码:

[X,map] = imread('original_chart.gif'); %# Load the indexed color image 
img = ind2gray(X,map);     %# Convert the image to grayscale 
reversedImage = img < max(img(:));  %# Convert to reversed black and white 

这里就是reversedImage样子:

alt text

+0

你可以看看图形如何生成? http://*.com/questions/2973973/how-do-i-calculate-the-area-with-matlab-unit-mh/2975223#2975223 – user198729 2010-06-06 02:00:25

如何只翻转色彩表?

colormap(flipud(colormap));