تشخیص و حذف حاشیه در تصاویر - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تشخیص و حذف حاشیه در تصاویر

+3 امتیاز

سلام. سوال قبلی تکراری بود شرمنده که جستجو نکردم.

من برنامه نویسی وب کار می کنم تو پروژه ای قرار عکس هایی را نمایش بدیم که حاشیه داره ما قصد داریم که حاشیه این تصاویر را حذف کنیم .آیا کسی ایده ای داره در مورد حذف کردن حاشیه در تصاویری که در زیر قرار دادم. با توجه به اینکه حاشیه تصویر فید هم شده و رنگ ثابتی هم نداره و یک قسمت از آن هم نوشته وجود داره. 

 

لطفاً دوستانی که در این زمینه اطلاعات دارند راهنماییم کنند .تشکر

 

سوال شده اسفند 26, 1392  بوسیله ی mazdak (امتیاز 20)   2 4 5

1 پاسخ

+3 امتیاز
 
بهترین پاسخ
1-  لاپلاسین تصویر را محاسبه کنید.
2- در 2 جهت افقی و عمودی projection را محاسبه کنید.
3 - میزان تغییرات را در هر 2 projection با مشتق محاسبه کنید.
4 - موقعیت بزرگترین peak ها را در هر سمت میزان تغییرات پیدا کنید.
 
#include <cv.h>
#include <highgui.h>

using namespace cv;
Rect deleteBorder(InputArray _src,int size){
    Mat src = _src.getMat();
    Mat sbl_x, sbl_y;
    int ksize = 2 * size + 1;
    Sobel(src, sbl_x, CV_32FC1, 2, 0, ksize);
    Sobel(src, sbl_y, CV_32FC1, 0, 2, ksize);
    Mat sum_img = sbl_x + sbl_y;

    Mat gray;
    normalize(sum_img, gray, 0, 255, CV_MINMAX, CV_8UC1);

    Mat row_proj, col_proj;
    reduce(gray, row_proj, 1, CV_REDUCE_AVG, CV_8UC1);
    reduce(gray, col_proj, 0, CV_REDUCE_AVG, CV_8UC1);
    Sobel(row_proj, row_proj, CV_8UC1, 0, 2, 3);
    Sobel(col_proj, col_proj, CV_8UC1, 2, 0, 3);


    Point peak_pos;
    int half_pos = row_proj.total() / 2;
    Rect result;

    minMaxLoc(row_proj(Range(0,half_pos), Range(0, 1)), 0, 0, 0, &peak_pos);
    result.y = peak_pos.y;
    minMaxLoc(row_proj(Range(half_pos, row_proj.total()), Range(0, 1)), 0, 0, 0, &peak_pos);
    result.height = (peak_pos.y + half_pos - result.y);

    half_pos = col_proj.total() / 2;
    minMaxLoc(col_proj(Range(0, 1), Range(0, half_pos)), 0, 0, 0, &peak_pos);
    result.x = peak_pos.x;
    minMaxLoc(col_proj(Range(0, 1), Range(half_pos, col_proj.total())), 0, 0, 0, &peak_pos);
    result.width = (peak_pos.x + half_pos - result.x);

    return result;

}
int _tmain(int argc, _TCHAR* argv[])
{
Mat img = imread("d:/12.jpg", 1);
Mat gray_img;
cvtColor(img, gray_img, CV_BGR2GRAY);
Rect r = deleteBorder(gray_img, 2);
Mat color_img;

rectangle(img, r, CV_RGB(0, 255, 0), 2);
imshow("result", img);
waitKey(0);

return 0;
}

 

 

 

پاسخ داده شده اسفند 27, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد اسفند 27, 1392 بوسیله ی BlueBlade
حذف حاشیه های اضافی از تصویر در متلب
مرسی مرسی مرسی
عالی بود. من دنبال این متلب بودم
...