扩大图像边界区域

为了防止在处理图像时边界越界,通常将图像根据其边界的像素值扩大一定的大小区域,如图所示,在opencv中有copyMakeBorder函数进行处理,具体:

cv::copyMakeBorder(image, image, patch_h, patch_h, patch_w, patch_w, cv::BORDER_CONSTANT, cv::Scalar());

 或者

	int winLen = winSize.width / 2 ;
	resizedImg8u = Mat::zeros( img8u.rows + winLen * 2, img8u.cols + winLen * 2, CV_8UC3 ) ;
	Rect roi( winLen, winLen, img8u.cols, img8u.rows ) ;
	img8u.copyTo( resizedImg8u( roi ) ) ;

	Mat srcUpROI = img8u( Rect( 0, 0, img8u.cols, winLen ) ) ;
	flip( srcUpROI, srcUpROI, 0 ) ;
	srcUpROI.copyTo( resizedImg8u( Rect( winLen, 0, img8u.cols, winLen ) ) ) ;

	Mat srcDownROI = img8u( Rect( 0, img8u.rows - winLen, img8u.cols, winLen ) ) ;
	flip( srcDownROI, srcDownROI, 0 ) ;
	srcDownROI.copyTo( resizedImg8u( Rect( winLen, resizedImg8u.rows - winLen, img8u.cols, winLen ) ) ) ;

	Mat srcLeftROI = resizedImg8u( Rect( winLen, 0, winLen, resizedImg8u.rows ) ) ;
	flip( srcLeftROI, srcLeftROI, 1 ) ;
	srcLeftROI.copyTo( resizedImg8u( Rect( 0, 0, winLen, resizedImg8u.rows ) ) ) ;

	Mat srcRightROI = resizedImg8u( Rect( resizedImg8u.cols - 2 * winLen, 0, winLen, resizedImg8u.rows ) ) ;
	flip( srcRightROI, srcRightROI, 1 ) ;
	srcRightROI.copyTo( resizedImg8u( Rect( resizedImg8u.cols - winLen, 0, winLen, resizedImg8u.rows ) ) ) ;
而在matlab中,可以采用代码:
function border_img=copyMakeBorder(img, patch_h, patch_w)
    [h,w,channel]=size(img);
    resized_h=h+2*patch_h;
    resized_w=w+2*patch_w;
    border_img=uint8(ones(resized_h,resized_w,channel));
    border_img(patch_h+1:resized_h-patch_h,patch_w+1:resized_w-patch_w,:)=img;
    %% top
    top= img(1:patch_h,1:w,:);

        top(:,:,1)=flipud(top(:,:,1));
        top(:,:,2)=flipud(top(:,:,2));
        top(:,:,3)=flipud(top(:,:,3));

   
    border_img(1:patch_h,patch_w+1:resized_w-patch_w,:)=top;
    %% down
    down= img(h-patch_h+1:h,1:w,:);

        down(:,:,1)=flipud(down(:,:,1));
        down(:,:,2)=flipud(down(:,:,2));
        down(:,:,3)=flipud(down(:,:,3));

    border_img(resized_h-patch_h+1:resized_h,patch_w+1:resized_w-patch_w,:)=down;
    
    %% left 
    left= border_img(1:resized_h,patch_w+1:patch_w+patch_w,:);

        left(:,:,1)=fliplr(left(:,:,1));
        left(:,:,2)=fliplr(left(:,:,2));
        left(:,:,3)=fliplr(left(:,:,3));


    border_img(1:resized_h,1:patch_w,:)=left;
    
    %% right
    right= border_img(1:resized_h,resized_w-2*patch_w+1:resized_w-patch_w,:);


        right(:,:,1)=fliplr(right(:,:,1));
        right(:,:,2)=fliplr(right(:,:,2));
        right(:,:,3)=fliplr(right(:,:,3));

    border_img(1:resized_h,resized_w-patch_w+1:resized_w,:)=right;
  
  end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值