6 图像通道

6.1 图像通道与转换

append_channel作用: 将Image图像的通道与MultiChannelImage图像的通道叠加得到新图像。

decompose3(MultiChannelImage: Imagel, Image2, Image3: :)作用:转换三通道彩色图像为三个单通道灰度图像。

read_image (Rectangle, './images/rectangle.png')
​
​
*1.获得图像的通道
count_channels (Rectangle, Channels)
dev_display (Rectangle)
disp_message (3600, Channels, 'window', 12, 12, 'black', 'true')
​
* 2.图像灰度化
rgb1_to_gray (Lena1, GrayImage)
​
* 3.分解RGB通道,转换为三个单通道的图像
decompose3 (Lena1, ImageR, ImageG, ImageB)
​
*访问某个通道(RGB)
access_channel (Lena1, Image_Rect_R, 1)
access_channel (Lena1,Image_Rect_G,1)
access_channel (Lena1, Image_Rect_B, 1)
​
*5.添加通道
append_channel (ImageR, ImageR, ImageExtended)
​
* 6.合成三通道图
compose3 (Image_Rect_R, Image_Rect_G,Image_Rect_B, MultiChannelImage)
​
*RGB转HSV通道
trans_from_rgb (ImageR, ImageG, ImageB, \
                ImageH, ImageS, ImageV, 'hsv')
​
*HSV转RGB
trans_from_rgb (ImageH, ImageS, ImageV, ImageR, ImageG, ImageB, 'hsv')

6.2构造实心圆

height:=100
c_x:=width/2
c_y:=height/2
* 半径
radius:=15
gen_image_const (Image_R, 'byte', width,height)
gen_image_const (Image_G, 'byte',width,height)
gen_image_const (Image_B, 'byte', width,height)
for r := 0 to height-1 by 1
    for c := 0 to width-1 by 1
        value:=(c-c_x)* (c-c_x)+ (r-c_y)*(r-c_y)
        dist:=fabs(sqrt(value))
        if (dist<=radius)
            r_gray:=0
            g_gray:=255
            b_gray:=0
        else
            r_gray:=255
            g_gray:=255
            b_gray:=255
        endif
        set_grayval (Image_R, r, c, r_gray)
        set_grayval (Image_G, r, c, g_gray)
        set_grayval (Image_B, r, c, b_gray)
    endfor
endfor
compose3 (Image_R, Image_G,Image_B, ImageRGB)
write_image (ImageRGB, 'png', 0, './images/circle')

6.3构造矩形框

height:=100
top:=25
bottom:=75
left:=30
right:=90
gen_image_const (Image_R, 'byte', width,height)
gen_image_const (Image_G, 'byte',width,height)
gen_image_const (Image_B, 'byte', width,height)
for r := 0 to height-1 by 1
    for c := 0 to width-1 by 1
        if ((r==top or r==bottom) and (left<= c  and c<=right))
            r_gray:=255
            g_gray:=0
            b_gray:=0
        elseif ((r>=top and r<=bottom) and (left== c  or c==right))
            *竖直边限定条件
            r_gray:=255
            g_gray:=0
            b_gray:=0
        else
            r_gray:=255
            g_gray:=255
            b_gray:=255
        endif
        set_grayval (Image_R, r, c, r_gray)
        set_grayval (Image_G, r, c, g_gray)
        set_grayval (Image_B, r, c, b_gray)
    endfor
endfor
compose3 (Image_R, Image_G,Image_B, ImageRGB)
*保存图 
write_image (ImageRGB, 'png', 0, './images/rectangle')
*HALCON算子规则
*输入icon ; 输出icon ; 输入control ; 输出control

6.4分解合成

*rgb->gray 彩色图灰度化
dev_get_window (WindowHandle)
read_image (circle, './images/circle')
read_image (rectangle, './images/rectangle')
decompose3 (rectangle, rectangleR, rectangleG, rectangleB)
decompose3 (circle, circleR, circleG, circleB)
*任务:使用 分解合成 的方法构造下列图像 原图(自己构造的 box  cicle)
*画图板中调色板信息参考
**0 白色图
**1 蓝色圆
**2 绿色框
**3 蓝色框(黄色)圆
**4 绿色框(紫色)圆
​
**0 白色图  25 5  255   255
compose3 (rectangleR, rectangleR, rectangleR, white_bg)
**1 蓝色圆 0  0   255
compose3 (circleR, circleR, circleG, blueCircle)
**2 绿色框 0  255   0
compose3 (rectangleG, rectangleR, rectangleG, green_box)
**3 蓝色框(黄色)圆   box: 0  0  255  circle::
compose3 (rectangleG, rectangleB, circleR, blue_box_1)
**4 绿色框(紫色)圆  box: 0  255  0
compose3 (rectangleG, circleR, rectangleB, green_box_1)
### 回答1: 亮通道先验增强是一种常用的图像增强技术,可以提高图像的清晰度和对比度。在Matlab中,可以通过以下步骤实现亮通道先验增强图像: 1. 读取图像:使用imread函数将待增强的图像读入Matlab中,得到一个矩阵表示的图像。 2. 亮通道计算:对于RGB图像,我们需要首先将图像转换到HSV色彩空间。使用rgb2hsv函数将RGB图像转换为HSV图像,并提取出亮度通道。 3. 估计全局透射率:在亮度通道中,我们可以通过使用imfilter函数对图像进行滤波来估计图像的全局透射率。常用的滤波方法有均值滤波、中值滤波等。 4. 估计全局大气光:通过获取原始图像中亮度较高的像素来估计图像的全局大气光。可以使用函数max找到亮度通道中最亮的像素,作为全局大气光估计值。 5. 亮度修正:将原始图像中的每个像素的亮度减去对应像素的透射率与全局大气光的乘积,得到亮度修正后的图像。 6. 对比度增强:为了增强图像的对比度,可以对亮度修正后的图像进行直方图均衡化操作,使用histeq函数来实现。 7. 转换回RGB:将亮度修正并对比度增强的图像转换回RGB色彩空间,使用hsv2rgb函数将图像从HSV转换为RGB。 8. 显示和保存结果:使用imshow函数显示增强后的图像,使用imwrite函数保存增强后的图像到磁盘。 通过以上步骤,我们可以使用Matlab实现亮通道先验增强图像的过程。根据具体的图像和需求,可以调整和优化每个步骤的参数和方法,以获得更好的增强效果。 ### 回答2: 亮通道先验增强是一种常用的图像增强技术,它利用了图像中的亮通道先验特性来提高图像的视觉效果。在Matlab中,我们可以通过以下步骤实现亮通道先验增强。 首先,我们需要加载原始图像。使用imread函数读取图像,并将其存储为灰度图像或RGB图像。 接下来,我们计算图像的亮通道。亮通道是指在每个像素周围一个局部窗口内的最小灰度值。我们可以通过使用imfilter函数并结合imregionalmin函数来计算每个像素的亮通道。 然后,我们将计算得到的亮通道图像进行归一化处理,以便提高后续的增强效果。可以使用mat2gray函数将图像灰度值映射到0-1的范围内。 接下来,我们计算图像的全局亮度值。通过计算亮通道的平均值来获得全局亮度。可以使用mean函数来计算平均值。 然后,我们计算图像的增强系数。通过将全局亮度值除以亮通道图像的最大值,我们可以得到一个增强系数。 最后,我们将亮通道图像与增强系数相乘,以得到最终增强后的图像。如果原始图像是RGB图像,我们需要对每个通道进行单独的增强。 这样,我们就完成了亮通道先验增强图像的过程。可以使用imwrite函数将增强后的图像保存到本地。 总结而言,亮通道先验增强图像是一种基于图像的亮通道特性来提高视觉效果的图像增强方法。在Matlab中,我们可以通过计算亮通道、归一化处理、计算全局亮度、计算增强系数以及对图像进行增强来实现该方法。这个过程可以简单地用几行代码实现,可以用于各种图像增强应用中。 ### 回答3: 亮通道先验(dark channel prior)是一种图像先验信息,它基于室外自然场景中的普遍规律,即室外远处的物体在至少一个颜色通道上的最小值会非常低。亮通道先验增强图像(dehazing)是通过利用亮通道先验来去除图像中的雾气效应,从而使图像变得更加清晰和真实。 在MATLAB中实现亮通道先验增强图像的基本步骤如下: 1. 读取待增强的图像,将其转换为双精度灰度图像。 2. 计算图像的亮通道(dark channel),亮通道的计算公式为:dark_channel = min(image, [], 3),其中min函数用于在第3个维度上计算每个像素点的最小值。 3. 对计算得到的亮通道进行滤波操作以减小噪声的影响,可以使用均值滤波或者导向滤波等方法。 4. 估计全局大气光(global atmospheric light)。一种简单的方法是选择亮通道最大值作为大气光估计值。例如,atmospheric_light = max(dark_channel(:))。 5. 根据亮通道先验,估计图像中的透射率(transmission)。透射率的估计公式为:transmission = 1 - w * dark_channel / atmospheric_light,其中w是一个常数,用于控制透射率的估计结果。 6. 对估计得到的透射率进行引导滤波以得到更加平滑的结果,可以使用引导滤波器函数guidedfilter()实现。 7. 根据估计得到的透射率对原始图像进行增强操作。增强的公式为:enhanced_image = (image - atmospheric_light) ./ max(transmission, t0) + atmospheric_light,其中t0是一个常数,用于避免除零错误。 8. 对增强后的图像进行后处理操作,例如亮度调整、对比度增强等。 通过以上步骤,我们可以实现亮通道先验增强图像的效果。当然,为了得到更好的结果,还可以尝试不同的参数及算法改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值